Sync puppet-ceilometer
4.0.0 b231c9681d476a05f437f828b95870ab4cbc4327 Change-Id: Ifa403d8066ede566dddbf49d67308c080b97ea77 Implements: blueprint merge-openstack-puppet-modules Signed-Off: Sergii Golovatiuk <sgolovatiuk@mirantis.com>
This commit is contained in:
parent
8814b0224d
commit
5e9c278652
@ -1,9 +1,11 @@
|
||||
fixtures:
|
||||
repositories:
|
||||
"inifile": "git://github.com/cprice-puppet/puppetlabs-inifile"
|
||||
"keystone": "git://github.com/stackforge/puppet-keystone.git"
|
||||
"mysql": "git://github.com/puppetlabs/puppetlabs-mysql.git"
|
||||
"nova": "git://github.com/stackforge/puppet-nova.git"
|
||||
"stdlib": "git://github.com/puppetlabs/puppetlabs-stdlib.git"
|
||||
'inifile': 'git://github.com/puppetlabs/puppetlabs-inifile'
|
||||
'keystone': 'git://github.com/stackforge/puppet-keystone.git'
|
||||
'mysql':
|
||||
repo: 'git://github.com/puppetlabs/puppetlabs-mysql.git'
|
||||
ref: 'origin/0.x'
|
||||
'nova': 'git://github.com/stackforge/puppet-nova.git'
|
||||
'stdlib': 'git://github.com/puppetlabs/puppetlabs-stdlib.git'
|
||||
symlinks:
|
||||
"ceilometer": "#{source_dir}"
|
||||
'ceilometer': "#{source_dir}"
|
||||
|
4
deployment/puppet/ceilometer/.gitignore
vendored
Normal file
4
deployment/puppet/ceilometer/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
*.swp
|
||||
spec/fixtures/modules/*
|
||||
pkg
|
||||
Gemfile.lock
|
@ -3,6 +3,7 @@ source 'https://rubygems.org'
|
||||
group :development, :test do
|
||||
gem 'puppetlabs_spec_helper', :require => false
|
||||
gem 'puppet-lint', '~> 0.3.2'
|
||||
gem 'rake', '10.1.1'
|
||||
end
|
||||
|
||||
if puppetversion = ENV['PUPPET_GEM_VERSION']
|
||||
|
@ -1,13 +1,14 @@
|
||||
name 'enovance-ceilometer'
|
||||
version '0.0.1'
|
||||
source 'none'
|
||||
name 'puppetlabs-ceilometer'
|
||||
version '4.0.0'
|
||||
source 'https://github.com/stackforge/puppet-ceilometer'
|
||||
author 'enovance'
|
||||
license 'Apache License, Version 2.0'
|
||||
summary 'Install/configure Openstack Ceilometer'
|
||||
description 'Install/configure Openstack Ceilometer'
|
||||
project_page 'https://launchpad.net/ceilometer'
|
||||
project_page 'https://launchpad.net/puppet-ceilometer'
|
||||
|
||||
# Dependencies
|
||||
dependency 'puppetlabs/inifile', '>=1.0.0 <2.0.0'
|
||||
dependency 'puppetlabs/keystone', '>=4.0.0 <5.0.0'
|
||||
dependency 'puppetlabs/mysql', '>=0.9.0 <3.0.0'
|
||||
dependency 'puppetlabs/stdlib', '>= 3.2.0'
|
||||
dependency 'cprice404/inifile', '>= 0.9.0'
|
||||
dependency 'puppetlabs/mysql', '>= 0.5.0 <1.0.0'
|
||||
|
@ -1,27 +0,0 @@
|
||||
puppet-ceilometer
|
||||
|
||||
This is the ceilometer module.
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
Apache License 2.0
|
||||
|
||||
Copyright 2012 eNovance <licensing@enovance.com>
|
||||
|
||||
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.
|
||||
|
||||
Contact
|
||||
-------
|
||||
|
||||
techs@enovance.com
|
128
deployment/puppet/ceilometer/README.md
Normal file
128
deployment/puppet/ceilometer/README.md
Normal file
@ -0,0 +1,128 @@
|
||||
Ceilometer
|
||||
==========
|
||||
|
||||
4.0.0 - 2014.1.0 - Icehouse
|
||||
|
||||
#### Table of Contents
|
||||
|
||||
1. [Overview - What is the ceilometer module?](#overview)
|
||||
2. [Module Description - What does the module do?](#module-description)
|
||||
3. [Setup - The basics of getting started with ceilometer](#setup)
|
||||
4. [Implementation - An under-the-hood peek at what the module is doing](#implementation)
|
||||
5. [Limitations - OS compatibility, etc.](#limitations)
|
||||
6. [Development - Guide for contributing to the module](#development)
|
||||
7. [Contributors - Those with commits](#contributors)
|
||||
8. [Release Notes - Notes on the most recent updates to the module](#release-notes)
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
The ceilometer module is part of [Stackforge](https://github.com/stackforge), an effort by the
|
||||
OpenStack infrastructure team to provice continuous integration testing and code review for
|
||||
OpenStack and OpenStack community projects not part of the core software. The module itself
|
||||
is used to flexibly configure and manage the metering service for OpenStack.
|
||||
|
||||
Module Description
|
||||
------------------
|
||||
|
||||
The ceilometer module is an attempt to make Puppet capable of managing the entirety of ceilometer.
|
||||
This includes manifests to provision the ceilometer api, agents, and database stores. A
|
||||
ceilometer_config type is supplied to assist in the manipulation of configuration files.
|
||||
|
||||
Setup
|
||||
-----
|
||||
|
||||
**What the ceilometer module affects**
|
||||
|
||||
* ceilometer, the metering service for OpenStack
|
||||
|
||||
### Installing ceilometer
|
||||
|
||||
example% puppet module install puppetlabs/ceilometer
|
||||
|
||||
### Beginning with ceilometer
|
||||
|
||||
Implementation
|
||||
--------------
|
||||
|
||||
### ceilometer
|
||||
|
||||
ceilometer is a combination of Puppet manifests and Ruby code to deliver configuration and
|
||||
extra functionality through types and providers.
|
||||
|
||||
Limitations
|
||||
-----------
|
||||
|
||||
* The ceilometer modules have only been tested on RedHat and Ubuntu family systems.
|
||||
|
||||
Development
|
||||
-----------
|
||||
|
||||
Developer documentation for the entire puppet-openstack project
|
||||
|
||||
* https://wiki.openstack.org/wiki/Puppet-openstack#Developer_documentation
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
* https://github.com/stackforge/puppet-ceilometer/graphs/contributors
|
||||
|
||||
This is the ceilometer module.
|
||||
|
||||
Release Notes
|
||||
-------------
|
||||
|
||||
** 4.0.0 **
|
||||
|
||||
* Stable Icehouse release.
|
||||
* Added ability to override notification topics.
|
||||
* Implemented notification agent service.
|
||||
* Fixed region name configuration.
|
||||
* Fixed ensure packages bug.
|
||||
* Added support for puppetlabs-mysql 2.2 and greater.
|
||||
* Fixed MySQL grant call.
|
||||
* Introduced ceilometer::config to handle additional custom options.
|
||||
|
||||
** 3.1.1 **
|
||||
|
||||
* Removed enforcement of glance_control_exchange.
|
||||
* Fixed user reference in db.pp.
|
||||
* Allow db fields configuration without need for dbsync for better replicaset support.
|
||||
* Fixed alarm package parameters Debian/Ubuntu.
|
||||
|
||||
|
||||
** 3.1.0 **
|
||||
|
||||
* Fixed package ceilometer-alarm type error on Debian.
|
||||
* Remove log_dir from params and make logs configurable in init.
|
||||
* Removed glance_notifications from notification_topic.
|
||||
* Don't match commented [DEFAULT] section.
|
||||
|
||||
** 3.0.0 **
|
||||
|
||||
* Initial release of the puppet-ceilometer module.
|
||||
|
||||
|
||||
License
|
||||
--------
|
||||
|
||||
Apache License 2.0
|
||||
|
||||
Copyright 2012 eNovance <licensing@enovance.com>
|
||||
|
||||
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.
|
||||
|
||||
Contact
|
||||
-------
|
||||
|
||||
techs@enovance.com
|
@ -1 +1,6 @@
|
||||
require 'puppetlabs_spec_helper/rake_tasks'
|
||||
require 'puppet-lint/tasks/puppet-lint'
|
||||
|
||||
PuppetLint.configuration.fail_on_warnings = true
|
||||
PuppetLint.configuration.send('disable_80chars')
|
||||
PuppetLint.configuration.send('disable_class_parameter_defaults')
|
||||
|
@ -22,18 +22,49 @@ node default {
|
||||
class { 'ceilometer::db':
|
||||
}
|
||||
|
||||
# Configure ceilometer database with mongodb
|
||||
|
||||
# class { 'ceilometer::db':
|
||||
# database_connection => 'mongodb://localhost:27017/ceilometer',
|
||||
# require => Class['mongodb'],
|
||||
# }
|
||||
|
||||
# Install the ceilometer-api service
|
||||
# The keystone_password parameter is mandatory
|
||||
class { 'ceilometer::api':
|
||||
keystone_password => 'tralalayouyou'
|
||||
}
|
||||
|
||||
# Set common auth parameters used by all agents (compute/central)
|
||||
class { 'ceilometer::agent::auth':
|
||||
auth_url => 'http://localhost:35357/v2.0',
|
||||
auth_password => 'tralalerotralala'
|
||||
}
|
||||
|
||||
# Install compute agent
|
||||
# default: enable
|
||||
class { 'ceilometer::agent::compute':
|
||||
}
|
||||
|
||||
# Enable ceilometer agent notification service
|
||||
class { 'ceilometer::agent_notification':
|
||||
# Install central agent
|
||||
class { 'ceilometer::agent::central':
|
||||
}
|
||||
|
||||
# Install alarm notifier
|
||||
class { 'ceilometer::alarm::notifier':
|
||||
}
|
||||
|
||||
# Install alarm evaluator
|
||||
class { 'ceilometer::alarm::evaluator':
|
||||
}
|
||||
|
||||
# Purge 1 month old meters
|
||||
class { 'ceilometer::expirer':
|
||||
time_to_live => '2592000'
|
||||
}
|
||||
|
||||
# Install notification agent
|
||||
class { 'ceilometer::agent::notification':
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,321 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
#
|
||||
# OpenStack Ceilometer Central Agent Service (ceilometer-agent-central)
|
||||
#
|
||||
# Description: Manages an OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) process as an HA resource
|
||||
#
|
||||
# Authors: Emilien Macchi
|
||||
# Mainly inspired by the Nova Scheduler resource agent written by Sebastien Han
|
||||
#
|
||||
# Support: openstack@lists.launchpad.net
|
||||
# License: Apache Software License (ASL) 2.0
|
||||
#
|
||||
#
|
||||
# See usage() function below for more details ...
|
||||
#
|
||||
# OCF instance parameters:
|
||||
# OCF_RESKEY_binary
|
||||
# OCF_RESKEY_config
|
||||
# OCF_RESKEY_user
|
||||
# OCF_RESKEY_pid
|
||||
# OCF_RESKEY_monitor_binary
|
||||
# OCF_RESKEY_additional_parameters
|
||||
#######################################################################
|
||||
# Initialization:
|
||||
|
||||
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
|
||||
. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
|
||||
|
||||
#######################################################################
|
||||
|
||||
# Fill in some defaults if no values are specified
|
||||
|
||||
OCF_RESKEY_binary_default="ceilometer-agent-central"
|
||||
OCF_RESKEY_config_default="/etc/ceilometer/ceilometer.conf"
|
||||
OCF_RESKEY_user_default="ceilometer"
|
||||
OCF_RESKEY_pid_default="$HA_RSCTMP/$OCF_RESOURCE_INSTANCE.pid"
|
||||
|
||||
: ${OCF_RESKEY_binary=${OCF_RESKEY_binary_default}}
|
||||
: ${OCF_RESKEY_config=${OCF_RESKEY_config_default}}
|
||||
: ${OCF_RESKEY_user=${OCF_RESKEY_user_default}}
|
||||
: ${OCF_RESKEY_pid=${OCF_RESKEY_pid_default}}
|
||||
|
||||
#######################################################################
|
||||
|
||||
usage() {
|
||||
cat <<UEND
|
||||
usage: $0 (start|stop|validate-all|meta-data|status|monitor)
|
||||
|
||||
$0 manages an OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) process as an HA resource
|
||||
|
||||
The 'start' operation starts the scheduler service.
|
||||
The 'stop' operation stops the scheduler service.
|
||||
The 'validate-all' operation reports whether the parameters are valid
|
||||
The 'meta-data' operation reports this RA's meta-data information
|
||||
The 'status' operation reports whether the scheduler service is running
|
||||
The 'monitor' operation reports whether the scheduler service seems to be working
|
||||
|
||||
UEND
|
||||
}
|
||||
|
||||
meta_data() {
|
||||
cat <<END
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
|
||||
<resource-agent name="ceilometer-agent-central">
|
||||
<version>1.0</version>
|
||||
|
||||
<longdesc lang="en">
|
||||
Resource agent for the OpenStack Ceilometer Central Agent Service (ceilometer-agent-central)
|
||||
May manage a ceilometer-agent-central instance or a clone set that
|
||||
creates a distributed ceilometer-agent-central cluster.
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Manages the OpenStack Ceilometer Central Agent Service (ceilometer-agent-central)</shortdesc>
|
||||
<parameters>
|
||||
|
||||
<parameter name="binary" unique="0" required="0">
|
||||
<longdesc lang="en">
|
||||
Location of the OpenStack Ceilometer Central Agent server binary (ceilometer-agent-central)
|
||||
</longdesc>
|
||||
<shortdesc lang="en">OpenStack Ceilometer Central Agent server binary (ceilometer-agent-central)</shortdesc>
|
||||
<content type="string" default="${OCF_RESKEY_binary_default}" />
|
||||
</parameter>
|
||||
|
||||
<parameter name="config" unique="0" required="0">
|
||||
<longdesc lang="en">
|
||||
Location of the OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) configuration file
|
||||
</longdesc>
|
||||
<shortdesc lang="en">OpenStack Ceilometer Central Agent (ceilometer-agent-central registry) config file</shortdesc>
|
||||
<content type="string" default="${OCF_RESKEY_config_default}" />
|
||||
</parameter>
|
||||
|
||||
<parameter name="user" unique="0" required="0">
|
||||
<longdesc lang="en">
|
||||
User running OpenStack Ceilometer Central Agent Service (ceilometer-agent-central)
|
||||
</longdesc>
|
||||
<shortdesc lang="en">OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) user</shortdesc>
|
||||
<content type="string" default="${OCF_RESKEY_user_default}" />
|
||||
</parameter>
|
||||
|
||||
<parameter name="pid" unique="0" required="0">
|
||||
<longdesc lang="en">
|
||||
The pid file to use for this OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) instance
|
||||
</longdesc>
|
||||
<shortdesc lang="en">OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) pid file</shortdesc>
|
||||
<content type="string" default="${OCF_RESKEY_pid_default}" />
|
||||
</parameter>
|
||||
|
||||
<parameter name="additional_parameters" unique="0" required="0">
|
||||
<longdesc lang="en">
|
||||
Additional parameters to pass on to the OpenStack Ceilometer Central Agent Service (ceilometer-agent-central)
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Additional parameters for ceilometer-agent-central</shortdesc>
|
||||
<content type="string" />
|
||||
</parameter>
|
||||
|
||||
</parameters>
|
||||
|
||||
<actions>
|
||||
<action name="start" timeout="20" />
|
||||
<action name="stop" timeout="20" />
|
||||
<action name="status" timeout="20" />
|
||||
<action name="monitor" timeout="30" interval="20" />
|
||||
<action name="validate-all" timeout="5" />
|
||||
<action name="meta-data" timeout="5" />
|
||||
</actions>
|
||||
</resource-agent>
|
||||
END
|
||||
}
|
||||
|
||||
#######################################################################
|
||||
# Functions invoked by resource manager actions
|
||||
|
||||
ceilometer_agent_central_check_port() {
|
||||
# This function has been taken from the squid RA and improved a bit
|
||||
# The length of the integer must be 4
|
||||
# Examples of valid port: "1080", "0080"
|
||||
# Examples of invalid port: "1080bad", "0", "0000", ""
|
||||
|
||||
local int
|
||||
local cnt
|
||||
|
||||
int="$1"
|
||||
cnt=${#int}
|
||||
echo $int |egrep -qx '[0-9]+(:[0-9]+)?(,[0-9]+(:[0-9]+)?)*'
|
||||
|
||||
if [ $? -ne 0 ] || [ $cnt -ne 4 ]; then
|
||||
ocf_log err "Invalid port number: $1"
|
||||
exit $OCF_ERR_CONFIGURED
|
||||
fi
|
||||
}
|
||||
|
||||
ceilometer_agent_central_validate() {
|
||||
local rc
|
||||
|
||||
check_binary $OCF_RESKEY_binary
|
||||
check_binary netstat
|
||||
|
||||
# A config file on shared storage that is not available
|
||||
# during probes is OK.
|
||||
if [ ! -f $OCF_RESKEY_config ]; then
|
||||
if ! ocf_is_probe; then
|
||||
ocf_log err "Config $OCF_RESKEY_config doesn't exist"
|
||||
return $OCF_ERR_INSTALLED
|
||||
fi
|
||||
ocf_log_warn "Config $OCF_RESKEY_config not available during a probe"
|
||||
fi
|
||||
|
||||
getent passwd $OCF_RESKEY_user >/dev/null 2>&1
|
||||
rc=$?
|
||||
if [ $rc -ne 0 ]; then
|
||||
ocf_log err "User $OCF_RESKEY_user doesn't exist"
|
||||
return $OCF_ERR_INSTALLED
|
||||
fi
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
ceilometer_agent_central_status() {
|
||||
local pid
|
||||
local rc
|
||||
|
||||
if [ ! -f $OCF_RESKEY_pid ]; then
|
||||
ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) is not running"
|
||||
return $OCF_NOT_RUNNING
|
||||
else
|
||||
pid=`cat $OCF_RESKEY_pid`
|
||||
fi
|
||||
|
||||
ocf_run -warn kill -s 0 $pid
|
||||
rc=$?
|
||||
if [ $rc -eq 0 ]; then
|
||||
return $OCF_SUCCESS
|
||||
else
|
||||
ocf_log info "Old PID file found, but OpenStack Ceilometer Central Agent (ceilometer-agent-central) is not running"
|
||||
return $OCF_NOT_RUNNING
|
||||
fi
|
||||
}
|
||||
|
||||
ceilometer_agent_central_monitor() {
|
||||
local rc
|
||||
local pid
|
||||
|
||||
ceilometer_agent_central_status
|
||||
rc=$?
|
||||
|
||||
# If status returned anything but success, return that immediately
|
||||
if [ $rc -ne $OCF_SUCCESS ]; then
|
||||
return $rc
|
||||
fi
|
||||
|
||||
ocf_log debug "OpenStack Ceilometer Central Agent (ceilometer-agent-central) monitor succeeded"
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
ceilometer_agent_central_start() {
|
||||
local rc
|
||||
|
||||
ceilometer_agent_central_status
|
||||
rc=$?
|
||||
if [ $rc -eq $OCF_SUCCESS ]; then
|
||||
ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) already running"
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
|
||||
# run the actual ceilometer-agent-central daemon. Don't use ocf_run as we're sending the tool's output
|
||||
# straight to /dev/null anyway and using ocf_run would break stdout-redirection here.
|
||||
su ${OCF_RESKEY_user} -s /bin/sh -c "${OCF_RESKEY_binary} --config-file=$OCF_RESKEY_config \
|
||||
$OCF_RESKEY_additional_parameters"' >> /dev/null 2>&1 & echo $!' > $OCF_RESKEY_pid
|
||||
|
||||
# Spin waiting for the server to come up.
|
||||
while true; do
|
||||
ceilometer_agent_central_monitor
|
||||
rc=$?
|
||||
[ $rc -eq $OCF_SUCCESS ] && break
|
||||
if [ $rc -ne $OCF_NOT_RUNNING ]; then
|
||||
ocf_log err "OpenStack Ceilometer Central Agent (ceilometer-agent-central) start failed"
|
||||
exit $OCF_ERR_GENERIC
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) started"
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
ceilometer_agent_central_stop() {
|
||||
local rc
|
||||
local pid
|
||||
|
||||
ceilometer_agent_central_status
|
||||
rc=$?
|
||||
if [ $rc -eq $OCF_NOT_RUNNING ]; then
|
||||
ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) already stopped"
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
|
||||
# Try SIGTERM
|
||||
pid=`cat $OCF_RESKEY_pid`
|
||||
ocf_run kill -s TERM $pid
|
||||
rc=$?
|
||||
if [ $rc -ne 0 ]; then
|
||||
ocf_log err "OpenStack Ceilometer Central Agent (ceilometer-agent-central) couldn't be stopped"
|
||||
exit $OCF_ERR_GENERIC
|
||||
fi
|
||||
|
||||
# stop waiting
|
||||
shutdown_timeout=15
|
||||
if [ -n "$OCF_RESKEY_CRM_meta_timeout" ]; then
|
||||
shutdown_timeout=$((($OCF_RESKEY_CRM_meta_timeout/1000)-5))
|
||||
fi
|
||||
count=0
|
||||
while [ $count -lt $shutdown_timeout ]; do
|
||||
ceilometer_agent_central_status
|
||||
rc=$?
|
||||
if [ $rc -eq $OCF_NOT_RUNNING ]; then
|
||||
break
|
||||
fi
|
||||
count=`expr $count + 1`
|
||||
sleep 1
|
||||
ocf_log debug "OpenStack Ceilometer Central Agent (ceilometer-agent-central) still hasn't stopped yet. Waiting ..."
|
||||
done
|
||||
|
||||
ceilometer_agent_central_status
|
||||
rc=$?
|
||||
if [ $rc -ne $OCF_NOT_RUNNING ]; then
|
||||
# SIGTERM didn't help either, try SIGKILL
|
||||
ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) failed to stop after ${shutdown_timeout}s \
|
||||
using SIGTERM. Trying SIGKILL ..."
|
||||
ocf_run kill -s KILL $pid
|
||||
fi
|
||||
|
||||
ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) stopped"
|
||||
|
||||
rm -f $OCF_RESKEY_pid
|
||||
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
#######################################################################
|
||||
|
||||
case "$1" in
|
||||
meta-data) meta_data
|
||||
exit $OCF_SUCCESS;;
|
||||
usage|help) usage
|
||||
exit $OCF_SUCCESS;;
|
||||
esac
|
||||
|
||||
# Anything except meta-data and help must pass validation
|
||||
ceilometer_agent_central_validate || exit $?
|
||||
|
||||
# What kind of method was invoked?
|
||||
case "$1" in
|
||||
start) ceilometer_agent_central_start;;
|
||||
stop) ceilometer_agent_central_stop;;
|
||||
status) ceilometer_agent_central_status;;
|
||||
monitor) ceilometer_agent_central_monitor;;
|
||||
validate-all) ;;
|
||||
*) usage
|
||||
exit $OCF_ERR_UNIMPLEMENTED;;
|
||||
esac
|
@ -1,321 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
#
|
||||
# OpenStack Ceilometer Alarm Evaluator Service (ceilometer-alarm-evaluator)
|
||||
#
|
||||
# Description: Manages an OpenStack Ceilometer Alarm Evaluator Service (ceilometer-alarm-evaluator) process as an HA resource
|
||||
#
|
||||
# Authors: Emilien Macchi
|
||||
# Mainly inspired by the Nova Scheduler resource agent written by Sebastien Han
|
||||
#
|
||||
# Support: openstack@lists.launchpad.net
|
||||
# License: Apache Software License (ASL) 2.0
|
||||
#
|
||||
#
|
||||
# See usage() function below for more details ...
|
||||
#
|
||||
# OCF instance parameters:
|
||||
# OCF_RESKEY_binary
|
||||
# OCF_RESKEY_config
|
||||
# OCF_RESKEY_user
|
||||
# OCF_RESKEY_pid
|
||||
# OCF_RESKEY_monitor_binary
|
||||
# OCF_RESKEY_additional_parameters
|
||||
#######################################################################
|
||||
# Initialization:
|
||||
|
||||
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
|
||||
. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
|
||||
|
||||
#######################################################################
|
||||
|
||||
# Fill in some defaults if no values are specified
|
||||
|
||||
OCF_RESKEY_binary_default="ceilometer-alarm-evaluator"
|
||||
OCF_RESKEY_config_default="/etc/ceilometer/ceilometer.conf"
|
||||
OCF_RESKEY_user_default="ceilometer"
|
||||
OCF_RESKEY_pid_default="$HA_RSCTMP/$OCF_RESOURCE_INSTANCE.pid"
|
||||
|
||||
: ${OCF_RESKEY_binary=${OCF_RESKEY_binary_default}}
|
||||
: ${OCF_RESKEY_config=${OCF_RESKEY_config_default}}
|
||||
: ${OCF_RESKEY_user=${OCF_RESKEY_user_default}}
|
||||
: ${OCF_RESKEY_pid=${OCF_RESKEY_pid_default}}
|
||||
|
||||
#######################################################################
|
||||
|
||||
usage() {
|
||||
cat <<UEND
|
||||
usage: $0 (start|stop|validate-all|meta-data|status|monitor)
|
||||
|
||||
$0 manages an OpenStack Ceilometer Alarm Evaluator Service (ceilometer-alarm-evaluator) process as an HA resource
|
||||
|
||||
The 'start' operation starts the service.
|
||||
The 'stop' operation stops the service.
|
||||
The 'validate-all' operation reports whether the parameters are valid
|
||||
The 'meta-data' operation reports this RA's meta-data information
|
||||
The 'status' operation reports whether the service is running
|
||||
The 'monitor' operation reports whether the service seems to be working
|
||||
|
||||
UEND
|
||||
}
|
||||
|
||||
meta_data() {
|
||||
cat <<END
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
|
||||
<resource-agent name="ceilometer-alarm-evaluator">
|
||||
<version>1.0</version>
|
||||
|
||||
<longdesc lang="en">
|
||||
Resource agent for the OpenStack Ceilometer Alarm Evaluator Service (ceilometer-alarm-evaluator)
|
||||
May manage a ceilometer-alarm-evaluatorinstance or a clone set that
|
||||
creates a distributed ceilometer-alarm-evaluator cluster.
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Manages the OpenStack Ceilometer Alarm Evaluator Service (ceilometer-alarm-evaluator)</shortdesc>
|
||||
<parameters>
|
||||
|
||||
<parameter name="binary" unique="0" required="0">
|
||||
<longdesc lang="en">
|
||||
Location of the OpenStack Ceilometer Alarm Evaluator server binary (ceilometer-alarm-evaluator)
|
||||
</longdesc>
|
||||
<shortdesc lang="en">OpenStack Ceilometer Alarm Evaluator server binary (ceilometer-alarm-evaluator)</shortdesc>
|
||||
<content type="string" default="${OCF_RESKEY_binary_default}" />
|
||||
</parameter>
|
||||
|
||||
<parameter name="config" unique="0" required="0">
|
||||
<longdesc lang="en">
|
||||
Location of the OpenStack Ceilometer Alarm Evaluator Service (ceilometer-alarm-evaluator) configuration file
|
||||
</longdesc>
|
||||
<shortdesc lang="en">OpenStack Ceilometer Alarm Evaluator (ceilometer-alarm-evaluator) config file</shortdesc>
|
||||
<content type="string" default="${OCF_RESKEY_config_default}" />
|
||||
</parameter>
|
||||
|
||||
<parameter name="user" unique="0" required="0">
|
||||
<longdesc lang="en">
|
||||
User running OpenStack Ceilometer Alarm Evaluator Service (ceilometer-alarm-evaluator)
|
||||
</longdesc>
|
||||
<shortdesc lang="en">OpenStack Ceilometer Alarm Evaluator Service (ceilometer-alarm-evaluator) user</shortdesc>
|
||||
<content type="string" default="${OCF_RESKEY_user_default}" />
|
||||
</parameter>
|
||||
|
||||
<parameter name="pid" unique="0" required="0">
|
||||
<longdesc lang="en">
|
||||
The pid file to use for this OpenStack Ceilometer Alarm Evaluator Service (ceilometer-alarm-evaluator) instance
|
||||
</longdesc>
|
||||
<shortdesc lang="en">OpenStack Ceilometer Alarm Evaluator Service (ceilometer-alarm-evaluator) pid file</shortdesc>
|
||||
<content type="string" default="${OCF_RESKEY_pid_default}" />
|
||||
</parameter>
|
||||
|
||||
<parameter name="additional_parameters" unique="0" required="0">
|
||||
<longdesc lang="en">
|
||||
Additional parameters to pass on to the OpenStack Ceilometer Alarm Evaluator Service (ceilometer-alarm-evaluator)
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Additional parameters for ceilometer-alarm-evaluator</shortdesc>
|
||||
<content type="string" />
|
||||
</parameter>
|
||||
|
||||
</parameters>
|
||||
|
||||
<actions>
|
||||
<action name="start" timeout="20" />
|
||||
<action name="stop" timeout="20" />
|
||||
<action name="status" timeout="20" />
|
||||
<action name="monitor" timeout="30" interval="20" />
|
||||
<action name="validate-all" timeout="5" />
|
||||
<action name="meta-data" timeout="5" />
|
||||
</actions>
|
||||
</resource-agent>
|
||||
END
|
||||
}
|
||||
|
||||
#######################################################################
|
||||
# Functions invoked by resource manager actions
|
||||
|
||||
ceilometer_alarm_evaluator_check_port() {
|
||||
# This function has been taken from the squid RA and improved a bit
|
||||
# The length of the integer must be 4
|
||||
# Examples of valid port: "1080", "0080"
|
||||
# Examples of invalid port: "1080bad", "0", "0000", ""
|
||||
|
||||
local int
|
||||
local cnt
|
||||
|
||||
int="$1"
|
||||
cnt=${#int}
|
||||
echo $int |egrep -qx '[0-9]+(:[0-9]+)?(,[0-9]+(:[0-9]+)?)*'
|
||||
|
||||
if [ $? -ne 0 ] || [ $cnt -ne 4 ]; then
|
||||
ocf_log err "Invalid port number: $1"
|
||||
exit $OCF_ERR_CONFIGURED
|
||||
fi
|
||||
}
|
||||
|
||||
ceilometer_alarm_evaluator_validate() {
|
||||
local rc
|
||||
|
||||
check_binary $OCF_RESKEY_binary
|
||||
check_binary netstat
|
||||
|
||||
# A config file on shared storage that is not available
|
||||
# during probes is OK.
|
||||
if [ ! -f $OCF_RESKEY_config ]; then
|
||||
if ! ocf_is_probe; then
|
||||
ocf_log err "Config $OCF_RESKEY_config doesn't exist"
|
||||
return $OCF_ERR_INSTALLED
|
||||
fi
|
||||
ocf_log_warn "Config $OCF_RESKEY_config not available during a probe"
|
||||
fi
|
||||
|
||||
getent passwd $OCF_RESKEY_user >/dev/null 2>&1
|
||||
rc=$?
|
||||
if [ $rc -ne 0 ]; then
|
||||
ocf_log err "User $OCF_RESKEY_user doesn't exist"
|
||||
return $OCF_ERR_INSTALLED
|
||||
fi
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
ceilometer_alarm_evaluator_status() {
|
||||
local pid
|
||||
local rc
|
||||
|
||||
if [ ! -f $OCF_RESKEY_pid ]; then
|
||||
ocf_log info "OpenStack Ceilometer Alarm Evaluator (ceilometer-alarm-evaluator) is not running"
|
||||
return $OCF_NOT_RUNNING
|
||||
else
|
||||
pid=`cat $OCF_RESKEY_pid`
|
||||
fi
|
||||
|
||||
ocf_run -warn kill -s 0 $pid
|
||||
rc=$?
|
||||
if [ $rc -eq 0 ]; then
|
||||
return $OCF_SUCCESS
|
||||
else
|
||||
ocf_log info "Old PID file found, but OpenStack Ceilometer Alarm Evaluator (ceilometer-alarm-evaluator) is not running"
|
||||
return $OCF_NOT_RUNNING
|
||||
fi
|
||||
}
|
||||
|
||||
ceilometer_alarm_evaluator_monitor() {
|
||||
local rc
|
||||
local pid
|
||||
|
||||
ceilometer_alarm_evaluator_status
|
||||
rc=$?
|
||||
|
||||
# If status returned anything but success, return that immediately
|
||||
if [ $rc -ne $OCF_SUCCESS ]; then
|
||||
return $rc
|
||||
fi
|
||||
|
||||
ocf_log debug "OpenStack Ceilometer Alarm Evaluator (ceilometer-alarm-evaluator) monitor succeeded"
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
ceilometer_alarm_evaluator_start() {
|
||||
local rc
|
||||
|
||||
ceilometer_alarm_evaluator_status
|
||||
rc=$?
|
||||
if [ $rc -eq $OCF_SUCCESS ]; then
|
||||
ocf_log info "OpenStack Ceilometer Alarm Evaluator (ceilometer-alarm-evaluator) already running"
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
|
||||
# run the actual ceilometer-alarm-evaluator daemon. Don't use ocf_run as we're sending the tool's output
|
||||
# straight to /dev/null anyway and using ocf_run would break stdout-redirection here.
|
||||
su ${OCF_RESKEY_user} -s /bin/sh -c "${OCF_RESKEY_binary} --config-file=$OCF_RESKEY_config \
|
||||
$OCF_RESKEY_additional_parameters"' >> /dev/null 2>&1 & echo $!' > $OCF_RESKEY_pid
|
||||
|
||||
# Spin waiting for the server to come up.
|
||||
while true; do
|
||||
ceilometer_alarm_evaluator_monitor
|
||||
rc=$?
|
||||
[ $rc -eq $OCF_SUCCESS ] && break
|
||||
if [ $rc -ne $OCF_NOT_RUNNING ]; then
|
||||
ocf_log err "OpenStack Ceilometer Alarm Evaluator (ceilometer-alarm-evaluator) start failed"
|
||||
exit $OCF_ERR_GENERIC
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
ocf_log info "OpenStack Ceilometer Alarm Evaluator (ceilometer-alarm-evaluator) started"
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
ceilometer_alarm_evaluator_stop() {
|
||||
local rc
|
||||
local pid
|
||||
|
||||
ceilometer_alarm_evaluator_status
|
||||
rc=$?
|
||||
if [ $rc -eq $OCF_NOT_RUNNING ]; then
|
||||
ocf_log info "OpenStack Ceilometer Alarm Evaluator (ceilometer-alarm-evaluator) already stopped"
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
|
||||
# Try SIGTERM
|
||||
pid=`cat $OCF_RESKEY_pid`
|
||||
ocf_run kill -s TERM $pid
|
||||
rc=$?
|
||||
if [ $rc -ne 0 ]; then
|
||||
ocf_log err "OpenStack Ceilometer Alarm Evaluator (ceilometer-alarm-evaluator) couldn't be stopped"
|
||||
exit $OCF_ERR_GENERIC
|
||||
fi
|
||||
|
||||
# stop waiting
|
||||
shutdown_timeout=15
|
||||
if [ -n "$OCF_RESKEY_CRM_meta_timeout" ]; then
|
||||
shutdown_timeout=$((($OCF_RESKEY_CRM_meta_timeout/1000)-5))
|
||||
fi
|
||||
count=0
|
||||
while [ $count -lt $shutdown_timeout ]; do
|
||||
ceilometer_alarm_evaluator_status
|
||||
rc=$?
|
||||
if [ $rc -eq $OCF_NOT_RUNNING ]; then
|
||||
break
|
||||
fi
|
||||
count=`expr $count + 1`
|
||||
sleep 1
|
||||
ocf_log debug "OpenStack Ceilometer Alarm Evaluator (ceilometer-alarm-evaluator) still hasn't stopped yet. Waiting ..."
|
||||
done
|
||||
|
||||
ceilometer_alarm_evaluator_status
|
||||
rc=$?
|
||||
if [ $rc -ne $OCF_NOT_RUNNING ]; then
|
||||
# SIGTERM didn't help either, try SIGKILL
|
||||
ocf_log info "OpenStack Ceilometer Alarm Evaluator (ceilometer-alarm-evaluator) failed to stop after ${shutdown_timeout}s \
|
||||
using SIGTERM. Trying SIGKILL ..."
|
||||
ocf_run kill -s KILL $pid
|
||||
fi
|
||||
|
||||
ocf_log info "OpenStack Ceilometer Alarm Evaluator (ceilometer-alarm-evaluator) stopped"
|
||||
|
||||
rm -f $OCF_RESKEY_pid
|
||||
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
#######################################################################
|
||||
|
||||
case "$1" in
|
||||
meta-data) meta_data
|
||||
exit $OCF_SUCCESS;;
|
||||
usage|help) usage
|
||||
exit $OCF_SUCCESS;;
|
||||
esac
|
||||
|
||||
# Anything except meta-data and help must pass validation
|
||||
ceilometer_alarm_evaluator_validate || exit $?
|
||||
|
||||
# What kind of method was invoked?
|
||||
case "$1" in
|
||||
start) ceilometer_alarm_evaluator_start;;
|
||||
stop) ceilometer_alarm_evaluator_stop;;
|
||||
status) ceilometer_alarm_evaluator_status;;
|
||||
monitor) ceilometer_alarm_evaluator_monitor;;
|
||||
validate-all) ;;
|
||||
*) usage
|
||||
exit $OCF_ERR_UNIMPLEMENTED;;
|
||||
esac
|
@ -15,7 +15,7 @@ Puppet::Type.type(:ceilometer_config).provide(
|
||||
'='
|
||||
end
|
||||
|
||||
def file_path
|
||||
def self.file_path
|
||||
'/etc/ceilometer/ceilometer.conf'
|
||||
end
|
||||
|
||||
|
@ -0,0 +1,83 @@
|
||||
Puppet::Type.type(:file_line_after).provide(:ruby) do
|
||||
def exists?
|
||||
lines.find do |line|
|
||||
line.chomp == resource[:line].chomp
|
||||
end
|
||||
end
|
||||
|
||||
def create
|
||||
if resource[:match]
|
||||
handle_create_with_match
|
||||
elsif resource[:after]
|
||||
handle_create_with_after
|
||||
else
|
||||
append_line
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
local_lines = lines
|
||||
File.open(resource[:path],'w') do |fh|
|
||||
fh.write(local_lines.reject{|l| l.chomp == resource[:line] }.join(''))
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def lines
|
||||
# If this type is ever used with very large files, we should
|
||||
# write this in a different way, using a temp
|
||||
# file; for now assuming that this type is only used on
|
||||
# small-ish config files that can fit into memory without
|
||||
# too much trouble.
|
||||
@lines ||= File.readlines(resource[:path])
|
||||
end
|
||||
|
||||
def handle_create_with_match()
|
||||
regex = resource[:match] ? Regexp.new(resource[:match]) : nil
|
||||
match_count = lines.select { |l| regex.match(l) }.size
|
||||
if match_count > 1 && resource[:multiple].to_s != 'true'
|
||||
raise Puppet::Error, "More than one line in file '#{resource[:path]}' matches pattern '#{resource[:match]}'"
|
||||
end
|
||||
File.open(resource[:path], 'w') do |fh|
|
||||
lines.each do |l|
|
||||
fh.puts(regex.match(l) ? resource[:line] : l)
|
||||
end
|
||||
|
||||
if (match_count == 0)
|
||||
fh.puts(resource[:line])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def handle_create_with_after
|
||||
regex = Regexp.new(resource[:after])
|
||||
|
||||
count = lines.count {|l| l.match(regex)}
|
||||
|
||||
case count
|
||||
when 1 # find the line to put our line after
|
||||
File.open(resource[:path], 'w') do |fh|
|
||||
lines.each do |l|
|
||||
fh.puts(l)
|
||||
if regex.match(l) then
|
||||
fh.puts(resource[:line])
|
||||
end
|
||||
end
|
||||
end
|
||||
when 0 # append the line to the end of the file
|
||||
append_line
|
||||
else
|
||||
raise Puppet::Error, "#{count} lines match pattern '#{resource[:after]}' in file '#{resource[:path]}'. One or no line must match the pattern."
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# append the line to the file.
|
||||
#
|
||||
# @api private
|
||||
def append_line
|
||||
File.open(resource[:path], 'a') do |fh|
|
||||
fh.puts resource[:line]
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,79 @@
|
||||
Puppet::Type.newtype(:file_line_after) do
|
||||
|
||||
desc <<-EOT
|
||||
Ensures that a given line is contained within a file. The implementation
|
||||
matches the full line, including whitespace at the beginning and end. If
|
||||
the line is not contained in the given file, Puppet will add the line to
|
||||
ensure the desired state. Multiple resources may be declared to manage
|
||||
multiple lines in the same file.
|
||||
|
||||
Example:
|
||||
|
||||
file_line_after { 'sudo_rule':
|
||||
path => '/etc/sudoers',
|
||||
line => '%sudo ALL=(ALL) ALL',
|
||||
}
|
||||
file_line_after { 'sudo_rule_nopw':
|
||||
path => '/etc/sudoers',
|
||||
line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',
|
||||
}
|
||||
|
||||
In this example, Puppet will ensure both of the specified lines are
|
||||
contained in the file /etc/sudoers.
|
||||
|
||||
EOT
|
||||
|
||||
ensurable do
|
||||
defaultvalues
|
||||
defaultto :present
|
||||
end
|
||||
|
||||
newparam(:name, :namevar => true) do
|
||||
desc 'An arbitrary name used as the identity of the resource.'
|
||||
end
|
||||
|
||||
newparam(:match) do
|
||||
desc 'An optional regular expression to run against existing lines in the file;\n' +
|
||||
'if a match is found, we replace that line rather than adding a new line.'
|
||||
end
|
||||
|
||||
newparam(:multiple) do
|
||||
desc 'An optional value to determine if match can change multiple lines.'
|
||||
newvalues(true, false)
|
||||
end
|
||||
|
||||
newparam(:after) do
|
||||
desc 'An optional value used to specify the line after which we will add any new lines. (Existing lines are added in place)'
|
||||
end
|
||||
|
||||
newparam(:line) do
|
||||
desc 'The line to be appended to the file located by the path parameter.'
|
||||
end
|
||||
|
||||
newparam(:path) do
|
||||
desc 'The file Puppet will ensure contains the line specified by the line parameter.'
|
||||
validate do |value|
|
||||
unless (Puppet.features.posix? and value =~ /^\//) or (Puppet.features.microsoft_windows? and (value =~ /^.:\// or value =~ /^\/\/[^\/]+\/[^\/]+/))
|
||||
raise(Puppet::Error, "File paths must be fully qualified, not '#{value}'")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Autorequire the file resource if it's being managed
|
||||
autorequire(:file) do
|
||||
self[:path]
|
||||
end
|
||||
|
||||
validate do
|
||||
unless self[:line] and self[:path]
|
||||
raise(Puppet::Error, "Both line and path are required attributes")
|
||||
end
|
||||
|
||||
if (self[:match])
|
||||
unless Regexp.new(self[:match]).match(self[:line])
|
||||
raise(Puppet::Error, "When providing a 'match' parameter, the value must be a regex that matches against the value of your 'line' parameter")
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
62
deployment/puppet/ceilometer/manifests/agent/auth.pp
Normal file
62
deployment/puppet/ceilometer/manifests/agent/auth.pp
Normal file
@ -0,0 +1,62 @@
|
||||
# The ceilometer::agent::auth class helps configure common
|
||||
# auth settings for the agents.
|
||||
#
|
||||
# == Parameters
|
||||
# [*auth_url*]
|
||||
# the keystone public endpoint
|
||||
# Optional. Defaults to 'http://localhost:5000/v2.0'
|
||||
#
|
||||
# [*auth_region*]
|
||||
# the keystone region of this node
|
||||
# Optional. Defaults to 'RegionOne'
|
||||
#
|
||||
# [*auth_user*]
|
||||
# the keystone user for ceilometer services
|
||||
# Optional. Defaults to 'ceilometer'
|
||||
#
|
||||
# [*auth_password*]
|
||||
# the keystone password for ceilometer services
|
||||
# Required.
|
||||
#
|
||||
# [*auth_tenant_name*]
|
||||
# the keystone tenant name for ceilometer services
|
||||
# Optional. Defaults to 'services'
|
||||
#
|
||||
# [*auth_tenant_id*]
|
||||
# the keystone tenant id for ceilometer services.
|
||||
# Optional. Defaults to empty.
|
||||
#
|
||||
# [*auth_cacert*]
|
||||
# Certificate chain for SSL validation. Optional; Defaults to 'None'
|
||||
#
|
||||
class ceilometer::agent::auth (
|
||||
$auth_password,
|
||||
$auth_url = 'http://localhost:5000/v2.0',
|
||||
$auth_region = 'RegionOne',
|
||||
$auth_user = 'ceilometer',
|
||||
$auth_tenant_name = 'services',
|
||||
$auth_tenant_id = '',
|
||||
$auth_cacert = undef,
|
||||
) {
|
||||
|
||||
if ! $auth_cacert {
|
||||
ceilometer_config { 'service_credentials/os_cacert': ensure => absent }
|
||||
} else {
|
||||
ceilometer_config { 'service_credentials/os_cacert': value => $auth_cacert }
|
||||
}
|
||||
|
||||
ceilometer_config {
|
||||
'service_credentials/os_auth_url' : value => $auth_url;
|
||||
'service_credentials/os_region_name' : value => $auth_region;
|
||||
'service_credentials/os_username' : value => $auth_user;
|
||||
'service_credentials/os_password' : value => $auth_password;
|
||||
'service_credentials/os_tenant_name' : value => $auth_tenant_name;
|
||||
}
|
||||
|
||||
if ($auth_tenant_id != '') {
|
||||
ceilometer_config {
|
||||
'service_credentials/os_tenant_id' : value => $auth_tenant_id;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,142 +1,36 @@
|
||||
# Installs/configures the ceilometer central agent
|
||||
#
|
||||
# == Parameters
|
||||
# [*auth_url*]
|
||||
# Keystone URL. Optional. Defaults to 'http://localhost:5000/v2.0'
|
||||
#
|
||||
# [*auth_region*]
|
||||
# Keystone region. Optional. Defaults to 'RegionOne'
|
||||
#
|
||||
# [*auth_user*]
|
||||
# Keystone user for ceilometer. Optional. Defaults to 'ceilometer'
|
||||
#
|
||||
# [*auth_password*]
|
||||
# Keystone password for ceilometer. Optional. Defaults to 'password'
|
||||
#
|
||||
# [*auth_tenant_name*]
|
||||
# Keystone tenant name for ceilometer. Optional. Defauls to 'services'
|
||||
#
|
||||
# [*auth_tenant_id*]
|
||||
# Keystone tenant id for ceilometer. Optional. Defaults to ''
|
||||
#
|
||||
# [*enabled*]
|
||||
# Should the service be enabled. Optional. Defauls to true
|
||||
#
|
||||
# [*ha_mode*]
|
||||
# Should we deploy service in HA mode. Active/Passive mode under pacemaker.
|
||||
# Optional. Defauls to false
|
||||
#
|
||||
class ceilometer::agent::central (
|
||||
$auth_host = 'http://localhost:5000/v2.0',
|
||||
$auth_region = 'RegionOne',
|
||||
$auth_user = 'ceilometer',
|
||||
$auth_password = 'password',
|
||||
$auth_tenant_name = 'services',
|
||||
$auth_tenant_id = '',
|
||||
$enabled = true,
|
||||
$ha_mode = false,
|
||||
$primary_controller = false
|
||||
$enabled = true,
|
||||
) {
|
||||
|
||||
include ceilometer::params
|
||||
|
||||
Ceilometer_config<||> ~> Service['ceilometer-agent-central']
|
||||
|
||||
Package['ceilometer-agent-central'] -> Service['ceilometer-agent-central']
|
||||
package { 'ceilometer-agent-central':
|
||||
ensure => installed,
|
||||
name => $::ceilometer::params::agent_central_package_name,
|
||||
}
|
||||
|
||||
tweaks::ubuntu_service_override { 'ceilometer-agent-central' :}
|
||||
|
||||
if $enabled {
|
||||
$service_ensure = 'running'
|
||||
} else {
|
||||
$service_ensure = 'stopped'
|
||||
}
|
||||
|
||||
ceilometer_config {
|
||||
'DEFAULT/os_auth_url' : value => "http://${auth_host}:5000/v2.0";
|
||||
'DEFAULT/os_auth_region' : value => $auth_region;
|
||||
'DEFAULT/os_username' : value => $auth_user;
|
||||
'DEFAULT/os_password' : value => $auth_password;
|
||||
'DEFAULT/os_tenant_name' : value => $auth_tenant_name;
|
||||
Package['ceilometer-common'] -> Service['ceilometer-agent-central']
|
||||
service { 'ceilometer-agent-central':
|
||||
ensure => $service_ensure,
|
||||
name => $::ceilometer::params::agent_central_service_name,
|
||||
enable => $enabled,
|
||||
hasstatus => true,
|
||||
hasrestart => true,
|
||||
}
|
||||
|
||||
if ($auth_tenant_id != '') {
|
||||
ceilometer_config {
|
||||
'DEFAULT/os_tenant_id' : value => $auth_tenant_id;
|
||||
}
|
||||
}
|
||||
|
||||
if $ha_mode {
|
||||
|
||||
$res_name = "p_${::ceilometer::params::agent_central_service_name}"
|
||||
|
||||
Package['pacemaker'] -> File['ceilometer-agent-central-ocf']
|
||||
Package['ceilometer-common'] -> File['ceilometer-agent-central-ocf']
|
||||
Package['ceilometer-agent-central'] -> File['ceilometer-agent-central-ocf']
|
||||
|
||||
file {'ceilometer-agent-central-ocf':
|
||||
path =>'/usr/lib/ocf/resource.d/mirantis/ceilometer-agent-central',
|
||||
mode => '0755',
|
||||
owner => root,
|
||||
group => root,
|
||||
source => 'puppet:///modules/ceilometer/ocf/ceilometer-agent-central',
|
||||
}
|
||||
|
||||
if $primary_controller {
|
||||
cs_resource { $res_name:
|
||||
ensure => present,
|
||||
primitive_class => 'ocf',
|
||||
provided_by => 'mirantis',
|
||||
primitive_type => 'ceilometer-agent-central',
|
||||
metadata => { 'target-role' => 'stopped', 'resource-stickiness' => '1' },
|
||||
parameters => { 'user' => 'ceilometer' },
|
||||
operations => {
|
||||
'monitor' => {
|
||||
'interval' => '20',
|
||||
'timeout' => '30'
|
||||
},
|
||||
'start' => {
|
||||
'timeout' => '360'
|
||||
},
|
||||
'stop' => {
|
||||
'timeout' => '360'
|
||||
}
|
||||
},
|
||||
}
|
||||
File['ceilometer-agent-central-ocf'] -> Cs_resource[$res_name] -> Service['ceilometer-agent-central']
|
||||
} else {
|
||||
File['ceilometer-agent-central-ocf'] -> Service['ceilometer-agent-central']
|
||||
}
|
||||
|
||||
service { 'ceilometer-agent-central':
|
||||
ensure => $service_ensure,
|
||||
name => $res_name,
|
||||
enable => $enabled,
|
||||
hasstatus => true,
|
||||
hasrestart => true,
|
||||
provider => "pacemaker",
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
Package['ceilometer-common'] -> Service['ceilometer-agent-central']
|
||||
Package['ceilometer-agent-central'] -> Service['ceilometer-agent-central']
|
||||
service { 'ceilometer-agent-central':
|
||||
ensure => $service_ensure,
|
||||
name => $::ceilometer::params::agent_central_service_name,
|
||||
enable => $enabled,
|
||||
hasstatus => true,
|
||||
hasrestart => true,
|
||||
}
|
||||
|
||||
}
|
||||
Package<| title == 'ceilometer-agent-central' or title == 'ceilometer-common'|> ~>
|
||||
Service<| title == 'ceilometer-agent-central'|>
|
||||
if !defined(Service['ceilometer-agent-central']) {
|
||||
notify{ "Module ${module_name} cannot notify service ceilometer-agent-central\
|
||||
on packages update": }
|
||||
}
|
||||
}
|
||||
|
@ -2,41 +2,11 @@
|
||||
# Include this class on all nova compute nodes
|
||||
#
|
||||
# == Parameters
|
||||
# [*auth_url*]
|
||||
# the keystone public endpoint
|
||||
# Optional. Defaults to 'http://localhost:5000/v2.0'
|
||||
#
|
||||
# [*auth_region*]
|
||||
# the keystone region of this compute node
|
||||
# Optional. Defaults to 'RegionOne'
|
||||
#
|
||||
# [*auth_user*]
|
||||
# the keystone user for ceilometer services
|
||||
# Optional. Defaults to 'ceilometer'
|
||||
#
|
||||
# [*auth_password*]
|
||||
# the keystone password for ceilometer services
|
||||
# Optional. Defaults to 'password'
|
||||
#
|
||||
# [*auth_tenant_name*]
|
||||
# the keystone tenant name for ceilometer services
|
||||
# Optional. Defaults to 'services'
|
||||
#
|
||||
# [*auth_tenant_id*]
|
||||
# the keystone tenant id for ceilometer services.
|
||||
# Optional. Defaults to empty.
|
||||
#
|
||||
# [*enabled*]
|
||||
# should the service be started or not
|
||||
# Optional. Defaults to true
|
||||
#
|
||||
class ceilometer::agent::compute (
|
||||
$auth_host = '127.0.0.1',
|
||||
$auth_region = 'RegionOne',
|
||||
$auth_user = 'ceilometer',
|
||||
$auth_password = 'password',
|
||||
$auth_tenant_name = 'services',
|
||||
$auth_tenant_id = '',
|
||||
$enabled = true,
|
||||
) inherits ceilometer {
|
||||
|
||||
@ -50,15 +20,16 @@ class ceilometer::agent::compute (
|
||||
name => $::ceilometer::params::agent_compute_package_name,
|
||||
}
|
||||
|
||||
tweaks::ubuntu_service_override { 'ceilometer-agent-compute' :}
|
||||
|
||||
if $::ceilometer::params::libvirt_group {
|
||||
User['ceilometer'] {
|
||||
groups +> [$::ceilometer::params::libvirt_group]
|
||||
groups => ['nova', $::ceilometer::params::libvirt_group]
|
||||
}
|
||||
} else {
|
||||
User['ceilometer'] {
|
||||
groups => ['nova']
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if $enabled {
|
||||
$service_ensure = 'running'
|
||||
} else {
|
||||
@ -73,51 +44,29 @@ class ceilometer::agent::compute (
|
||||
hasstatus => true,
|
||||
hasrestart => true,
|
||||
}
|
||||
Package<| title == 'ceilometer-agent-compute' or title == 'ceilometer-common'|> ~>
|
||||
Service<| title == 'ceilometer-agent-compute'|>
|
||||
if !defined(Service['ceilometer-agent-compute']) {
|
||||
notify{ "Module ${module_name} cannot notify service ceilometer-agent-compute\
|
||||
on packages update": }
|
||||
}
|
||||
|
||||
ceilometer_config {
|
||||
'DEFAULT/os_auth_url' : value => "http://${auth_host}:5000/v2.0";
|
||||
'DEFAULT/os_auth_region' : value => $auth_region;
|
||||
'DEFAULT/os_username' : value => $auth_user;
|
||||
'DEFAULT/os_password' : value => $auth_password;
|
||||
'DEFAULT/os_tenant_name' : value => $auth_tenant_name;
|
||||
}
|
||||
|
||||
if ($auth_tenant_id != '') {
|
||||
ceilometer_config {
|
||||
'DEFAULT/os_tenant_id' : value => $auth_tenant_id;
|
||||
}
|
||||
}
|
||||
|
||||
#NOTE(adidenko): the line below pulled from ceilometer master and
|
||||
# 'file_line_after' replaced with 'file_line'
|
||||
|
||||
#NOTE(dprince): This is using a custom (inline) file_line provider
|
||||
# until this lands upstream:
|
||||
# https://github.com/puppetlabs/puppetlabs-stdlib/pull/174
|
||||
Nova_config<| |> {
|
||||
before +> File_line [
|
||||
before +> File_line_after[
|
||||
'nova-notification-driver-common',
|
||||
'nova-notification-driver-ceilometer'
|
||||
],
|
||||
}
|
||||
|
||||
file_line {
|
||||
file_line_after {
|
||||
'nova-notification-driver-common':
|
||||
line =>
|
||||
line =>
|
||||
'notification_driver=nova.openstack.common.notifier.rpc_notifier',
|
||||
path => '/etc/nova/nova.conf',
|
||||
after => '^\s*\[DEFAULT\]',
|
||||
path => '/etc/nova/nova.conf',
|
||||
after => '^\s*\[DEFAULT\]',
|
||||
notify => Service['nova-compute'];
|
||||
'nova-notification-driver-ceilometer':
|
||||
line => 'notification_driver=ceilometer.compute.nova_notifier',
|
||||
path => '/etc/nova/nova.conf',
|
||||
after => '^\s*\[DEFAULT\]',
|
||||
line => 'notification_driver=ceilometer.compute.nova_notifier',
|
||||
path => '/etc/nova/nova.conf',
|
||||
after => '^\s*\[DEFAULT\]',
|
||||
notify => Service['nova-compute'];
|
||||
}
|
||||
|
||||
}
|
||||
|
74
deployment/puppet/ceilometer/manifests/agent/notification.pp
Normal file
74
deployment/puppet/ceilometer/manifests/agent/notification.pp
Normal file
@ -0,0 +1,74 @@
|
||||
#
|
||||
# Copyright (C) 2014 eNovance SAS <licensing@enovance.com>
|
||||
#
|
||||
# Author: Emilien Macchi <emilien.macchi@enovance.com>
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# == Class: ceilometer::agent::notification
|
||||
#
|
||||
# Configure the ceilometer notification agent.
|
||||
# This configures the plugin for the API server, but does nothing
|
||||
# about configuring the agents that must also run and share a config
|
||||
# file with the OVS plugin if both are on the same machine.
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# [*enabled*]
|
||||
# (optional) Should the service be started or not
|
||||
# Defaults to true
|
||||
#
|
||||
# [*ack_on_event_error*]
|
||||
# (optional) Acknowledge message when event persistence fails.
|
||||
# Defaults to true
|
||||
#
|
||||
# [*store_events*]
|
||||
# (optional) Save event details.
|
||||
# Defaults to false
|
||||
#
|
||||
|
||||
class ceilometer::agent::notification (
|
||||
$enabled = true,
|
||||
$ack_on_event_error = true,
|
||||
$store_events = false
|
||||
) {
|
||||
|
||||
include ceilometer::params
|
||||
|
||||
Ceilometer_config<||> ~> Service['ceilometer-agent-notification']
|
||||
|
||||
Package[$::ceilometer::params::agent_notification_package_name] -> Service['ceilometer-agent-notification']
|
||||
Package[$::ceilometer::params::agent_notification_package_name] -> Package<| title == 'ceilometer-agent-notification' |>
|
||||
ensure_packages([$::ceilometer::params::agent_notification_package_name])
|
||||
|
||||
if $enabled {
|
||||
$service_ensure = 'running'
|
||||
} else {
|
||||
$service_ensure = 'stopped'
|
||||
}
|
||||
|
||||
Package['ceilometer-common'] -> Service['ceilometer-agent-notification']
|
||||
service { 'ceilometer-agent-notification':
|
||||
ensure => $service_ensure,
|
||||
name => $::ceilometer::params::agent_notification_service_name,
|
||||
enable => $enabled,
|
||||
hasstatus => true,
|
||||
hasrestart => true
|
||||
}
|
||||
|
||||
ceilometer_config {
|
||||
'notification/ack_on_event_error': value => $ack_on_event_error;
|
||||
'notification/store_events' : value => $store_events;
|
||||
}
|
||||
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
# Installs the ceilometer agent notification service
|
||||
#
|
||||
# == Params
|
||||
# [*enabled*]
|
||||
# should the service be enabled
|
||||
#
|
||||
class ceilometer::agent_notification (
|
||||
$enabled = true,
|
||||
$use_neutron = false,
|
||||
$swift = false,
|
||||
) {
|
||||
|
||||
include ceilometer::params
|
||||
|
||||
if $enabled {
|
||||
$service_ensure = 'running'
|
||||
} else {
|
||||
$service_ensure = 'stopped'
|
||||
}
|
||||
|
||||
Ceilometer_config<||> ~> Service['ceilometer-agent-notification']
|
||||
|
||||
package { 'ceilometer-agent-notification':
|
||||
ensure => installed,
|
||||
name => $::ceilometer::params::agent_notification_package,
|
||||
}
|
||||
|
||||
case $::osfamily {
|
||||
'Debian': {
|
||||
tweaks::ubuntu_service_override { 'ceilometer-agent-notification' :}
|
||||
}
|
||||
}
|
||||
|
||||
Package['ceilometer-agent-notification'] ~> Service['ceilometer-agent-notification']
|
||||
|
||||
if $swift {
|
||||
class { 'swift::notify::ceilometer':
|
||||
enable_ceilometer => true,
|
||||
}
|
||||
}
|
||||
|
||||
if $use_neutron {
|
||||
include neutron::notify::ceilometer
|
||||
}
|
||||
|
||||
service { 'ceilometer-agent-notification':
|
||||
ensure => $service_ensure,
|
||||
name => $::ceilometer::params::agent_notification_service,
|
||||
enable => $enabled,
|
||||
hasstatus => true,
|
||||
hasrestart => true,
|
||||
require => [
|
||||
Class['ceilometer::db'],
|
||||
Class['ceilometer::api'],
|
||||
Exec['ceilometer-dbsync'],
|
||||
],
|
||||
}
|
||||
}
|
@ -1,120 +1,55 @@
|
||||
# Installs/configures the ceilometer alarm evaluator service
|
||||
# Installs the ceilometer alarm evaluator service
|
||||
#
|
||||
# == Parameters
|
||||
# == Params
|
||||
# [*enabled*]
|
||||
# Should the service be enabled. Optional. Defauls to true
|
||||
#
|
||||
# [*eval_interval*]
|
||||
# Period of evaluation cycle. This should be >= than configured pipeline
|
||||
# interval of metrics.
|
||||
#
|
||||
# [*ha_mode*]
|
||||
# Should we deploy service in HA mode. Active/Passive mode under pacemaker.
|
||||
# Optional. Defauls to false
|
||||
# should the service be enabled
|
||||
# [*evaluation_interval*]
|
||||
# define the time interval for the alarm evaluator
|
||||
# [*evaluation_service*]
|
||||
# define which service use for the evaluator
|
||||
# [*partition_rpc_topic*]
|
||||
# define which topic the alarm evaluator should access
|
||||
# [*record_history*]
|
||||
# Record alarm change events
|
||||
#
|
||||
class ceilometer::alarm::evaluator (
|
||||
$enabled = true,
|
||||
$eval_interval = 600,
|
||||
$ha_mode = false,
|
||||
$primary_controller = false
|
||||
)
|
||||
{
|
||||
$enabled = true,
|
||||
$evaluation_interval = 60,
|
||||
$evaluation_service = 'ceilometer.alarm.service.SingletonAlarmService',
|
||||
$partition_rpc_topic = 'alarm_partition_coordination',
|
||||
$record_history = true,
|
||||
) {
|
||||
|
||||
include ceilometer::params
|
||||
|
||||
validate_re($evaluation_interval,'^(\d+)$')
|
||||
|
||||
Ceilometer_config<||> ~> Service['ceilometer-alarm-evaluator']
|
||||
|
||||
if ! defined(Notify['ceilometer-alarm']) {
|
||||
package { $::ceilometer::params::alarm_package:
|
||||
ensure => installed
|
||||
}
|
||||
notify { 'ceilometer-alarm': }
|
||||
}
|
||||
|
||||
tweaks::ubuntu_service_override { 'ceilometer-alarm-evaluator' :
|
||||
package_name => 'ceilometer-alarm',
|
||||
}
|
||||
Package[$::ceilometer::params::alarm_package_name] -> Service['ceilometer-alarm-evaluator']
|
||||
Package[$::ceilometer::params::alarm_package_name] -> Package<| title == 'ceilometer-alarm' |>
|
||||
ensure_packages($::ceilometer::params::alarm_package_name)
|
||||
|
||||
if $enabled {
|
||||
$service_ensure = 'running'
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$service_ensure = 'stopped'
|
||||
}
|
||||
|
||||
Package['ceilometer-common'] -> Service['ceilometer-alarm-evaluator']
|
||||
|
||||
service { 'ceilometer-alarm-evaluator':
|
||||
ensure => $service_ensure,
|
||||
name => $::ceilometer::params::alarm_evaluator_service_name,
|
||||
enable => $enabled,
|
||||
hasstatus => true,
|
||||
hasrestart => true
|
||||
}
|
||||
|
||||
ceilometer_config {
|
||||
'alarm/evaluation_interval': value => $eval_interval;
|
||||
}
|
||||
|
||||
if $ha_mode {
|
||||
|
||||
$res_name = "p_${::ceilometer::params::alarm_evaluator_service}"
|
||||
|
||||
Package['ceilometer-common'] -> File['ceilometer-alarm-evaluator-ocf']
|
||||
Package[$::ceilometer::params::alarm_package] -> File['ceilometer-alarm-evaluator-ocf']
|
||||
Package['pacemaker'] -> File['ceilometer-alarm-evaluator-ocf']
|
||||
file {'ceilometer-alarm-evaluator-ocf':
|
||||
path =>'/usr/lib/ocf/resource.d/mirantis/ceilometer-alarm-evaluator',
|
||||
mode => '0755',
|
||||
owner => root,
|
||||
group => root,
|
||||
source => 'puppet:///modules/ceilometer/ocf/ceilometer-alarm-evaluator',
|
||||
'alarm/evaluation_interval' : value => $evaluation_interval;
|
||||
'alarm/evaluation_service' : value => $evaluation_service;
|
||||
'alarm/partition_rpc_topic' : value => $partition_rpc_topic;
|
||||
'alarm/record_history' : value => $record_history;
|
||||
}
|
||||
|
||||
if $primary_controller {
|
||||
cs_resource { $res_name:
|
||||
ensure => present,
|
||||
primitive_class => 'ocf',
|
||||
provided_by => 'mirantis',
|
||||
primitive_type => 'ceilometer-alarm-evaluator',
|
||||
metadata => { 'target-role' => 'stopped' },
|
||||
parameters => { 'user' => 'ceilometer' },
|
||||
operations => {
|
||||
'monitor' => {
|
||||
'interval' => '20',
|
||||
'timeout' => '30'
|
||||
}
|
||||
,
|
||||
'start' => {
|
||||
'timeout' => '360'
|
||||
}
|
||||
,
|
||||
'stop' => {
|
||||
'timeout' => '360'
|
||||
}
|
||||
},
|
||||
}
|
||||
File['ceilometer-alarm-evaluator-ocf'] -> Cs_resource[$res_name] -> Service['ceilometer-alarm-evaluator']
|
||||
} else {
|
||||
File['ceilometer-alarm-evaluator-ocf'] -> Service['ceilometer-alarm-evaluator']
|
||||
}
|
||||
|
||||
service { 'ceilometer-alarm-evaluator':
|
||||
ensure => $service_ensure,
|
||||
name => $res_name,
|
||||
enable => $enabled,
|
||||
hasstatus => true,
|
||||
hasrestart => true,
|
||||
provider => "pacemaker",
|
||||
}
|
||||
|
||||
} else {
|
||||
Package['ceilometer-common'] -> Service['ceilometer-alarm-evaluator']
|
||||
Package[$::ceilometer::params::alarm_package] -> Service['ceilometer-alarm-evaluator']
|
||||
|
||||
service { 'ceilometer-alarm-evaluator':
|
||||
ensure => $service_ensure,
|
||||
name => $::ceilometer::params::alarm_evaluator_service,
|
||||
enable => $enabled,
|
||||
hasstatus => true,
|
||||
hasrestart => true,
|
||||
}
|
||||
|
||||
}
|
||||
Package<| title == $::ceilometer::params::alarm_package or
|
||||
title == 'ceilometer-common'|> ~>
|
||||
Service<| title == 'ceilometer-alarm-evaluator'|>
|
||||
if !defined(Service['ceilometer-alarm-evaluator']) {
|
||||
notify{ "Module ${module_name} cannot notify service ceilometer-alarm-evaluator\
|
||||
on packages update": }
|
||||
}
|
||||
}
|
||||
|
@ -1,49 +1,67 @@
|
||||
# Installs/configures the ceilometer alarm notifier service
|
||||
# Installs the ceilometer alarm notifier service
|
||||
#
|
||||
# == Parameters
|
||||
# == Params
|
||||
# [*enabled*]
|
||||
# Should the service be enabled. Optional. Defauls to true
|
||||
# should the service be enabled
|
||||
# [*notifier_rpc_topic*]
|
||||
# define on which topic the notifier will have
|
||||
# access
|
||||
# [*rest_notifier_certificate_key*]
|
||||
# define the certificate key for the rest service
|
||||
# [*rest_notifier_certificate_file*]
|
||||
# define the certificate file for the rest service
|
||||
# [*rest_notifier_ssl_verify*]
|
||||
# should the ssl verify parameter be enabled
|
||||
#
|
||||
class ceilometer::alarm::notifier (
|
||||
$enabled = true,
|
||||
)
|
||||
{
|
||||
$enabled = true,
|
||||
$notifier_rpc_topic = undef,
|
||||
$rest_notifier_certificate_key = undef,
|
||||
$rest_notifier_certificate_file = undef,
|
||||
$rest_notifier_ssl_verify = true,
|
||||
) {
|
||||
|
||||
include ceilometer::params
|
||||
|
||||
validate_bool($rest_notifier_ssl_verify)
|
||||
|
||||
Ceilometer_config<||> ~> Service['ceilometer-alarm-notifier']
|
||||
Package['ceilometer-common'] -> Service['ceilometer-alarm-notifier']
|
||||
Package[$::ceilometer::params::alarm_package] -> Service['ceilometer-alarm-notifier']
|
||||
|
||||
if ! defined(Notify['ceilometer-alarm']) {
|
||||
package { $::ceilometer::params::alarm_package:
|
||||
ensure => installed
|
||||
}
|
||||
notify { 'ceilometer-alarm': }
|
||||
}
|
||||
|
||||
tweaks::ubuntu_service_override { 'ceilometer-alarm-notifier' :
|
||||
package_name => 'ceilometer-alarm',
|
||||
}
|
||||
Package[$::ceilometer::params::alarm_package_name] -> Service['ceilometer-alarm-notifier']
|
||||
Package[$::ceilometer::params::alarm_package_name] -> Package<| title == 'ceilometer-alarm' |>
|
||||
ensure_packages($::ceilometer::params::alarm_package_name)
|
||||
|
||||
if $enabled {
|
||||
$service_ensure = 'running'
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$service_ensure = 'stopped'
|
||||
}
|
||||
|
||||
Package['ceilometer-common'] -> Service['ceilometer-alarm-notifier']
|
||||
|
||||
service { 'ceilometer-alarm-notifier':
|
||||
ensure => $service_ensure,
|
||||
name => $::ceilometer::params::alarm_notifier_service,
|
||||
name => $::ceilometer::params::alarm_notifier_service_name,
|
||||
enable => $enabled,
|
||||
hasstatus => true,
|
||||
hasrestart => true,
|
||||
hasrestart => true
|
||||
}
|
||||
Package<| title == $::ceilometer::params::alarm_package or
|
||||
title == 'ceilometer-common'|> ~>
|
||||
Service<| title == 'ceilometer-alarm-notifier'|>
|
||||
if !defined(Service['ceilometer-alarm-notifier']) {
|
||||
notify{ "Module ${module_name} cannot notify service ceilometer-alarm-notifier\
|
||||
on packages update": }
|
||||
|
||||
if $notifier_rpc_topic != undef {
|
||||
ceilometer_config {
|
||||
'alarm/notifier_rpc_topic' : value => $notifier_rpc_topic;
|
||||
}
|
||||
}
|
||||
if $rest_notifier_certificate_key != undef {
|
||||
ceilometer_config {
|
||||
'alarm/rest_notifier_certificate_key' :value => $rest_notifier_certificate_key;
|
||||
'alarm/rest_notifier_ssl_verify' :value => $rest_notifier_ssl_verify;
|
||||
}
|
||||
}
|
||||
if $rest_notifier_certificate_file != undef {
|
||||
ceilometer_config {
|
||||
'alarm/rest_notifier_certificate_file' :value => $rest_notifier_certificate_file;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -27,12 +27,15 @@
|
||||
# [*keystone_password*] password to authenticate with
|
||||
# Mandatory.
|
||||
#
|
||||
# [*bind_host*] service binds on this ip.
|
||||
# Optional. Default '0.0.0.0'.
|
||||
# [*host*]
|
||||
# (optional) The ceilometer api bind address
|
||||
# Defaults to 0.0.0.0
|
||||
#
|
||||
# [*bind_port*] service binds on this port.
|
||||
# Optional. Default '8777'
|
||||
# [*port*]
|
||||
# (optional) The ceilometer api port
|
||||
# Defaults to 8777
|
||||
#
|
||||
|
||||
class ceilometer::api (
|
||||
$enabled = true,
|
||||
$keystone_host = '127.0.0.1',
|
||||
@ -42,8 +45,9 @@ class ceilometer::api (
|
||||
$keystone_user = 'ceilometer',
|
||||
$keystone_tenant = 'services',
|
||||
$keystone_password = false,
|
||||
$bind_host = '0.0.0.0',
|
||||
$bind_port = '8777',
|
||||
$keystone_auth_uri = false,
|
||||
$host = '0.0.0.0',
|
||||
$port = '8777'
|
||||
) {
|
||||
|
||||
include ceilometer::params
|
||||
@ -59,8 +63,6 @@ class ceilometer::api (
|
||||
name => $::ceilometer::params::api_package_name,
|
||||
}
|
||||
|
||||
tweaks::ubuntu_service_override { 'ceilometer-api' :}
|
||||
|
||||
if $enabled {
|
||||
$service_ensure = 'running'
|
||||
} else {
|
||||
@ -77,12 +79,6 @@ class ceilometer::api (
|
||||
require => Class['ceilometer::db'],
|
||||
subscribe => Exec['ceilometer-dbsync']
|
||||
}
|
||||
Package<| title == 'ceilometer-api' or title == 'ceilometer-common'|> ~>
|
||||
Service<| title == 'ceilometer-api'|>
|
||||
if !defined(Service['ceilometer-api']) {
|
||||
notify{ "Module ${module_name} cannot notify service ceilometer-api\
|
||||
on packages update": }
|
||||
}
|
||||
|
||||
ceilometer_config {
|
||||
'keystone_authtoken/auth_host' : value => $keystone_host;
|
||||
@ -91,24 +87,8 @@ class ceilometer::api (
|
||||
'keystone_authtoken/admin_tenant_name' : value => $keystone_tenant;
|
||||
'keystone_authtoken/admin_user' : value => $keystone_user;
|
||||
'keystone_authtoken/admin_password' : value => $keystone_password;
|
||||
}
|
||||
|
||||
ceilometer_config {
|
||||
'api/host': value => $bind_host;
|
||||
'api/port': value => $bind_port;
|
||||
}
|
||||
|
||||
# endpoint encryption
|
||||
if $keystone_protocol == '___https___' {
|
||||
ceilometer_config {
|
||||
'ssl/cert_file': value => $::ceilometer::params::ssl_cert_file;
|
||||
'ssl/key_file': value => $::ceilometer::params::ssl_key_file;
|
||||
# 'ssl/ca_file': value => $::ceilometer::params::ssl_ca_file;
|
||||
}
|
||||
|
||||
User['ceilometer'] {
|
||||
groups +> ['ssl-cert']
|
||||
}
|
||||
'api/host' : value => $host;
|
||||
'api/port' : value => $port;
|
||||
}
|
||||
|
||||
if $keystone_auth_admin_prefix {
|
||||
@ -122,4 +102,14 @@ class ceilometer::api (
|
||||
}
|
||||
}
|
||||
|
||||
if $keystone_auth_uri {
|
||||
ceilometer_config {
|
||||
'keystone_authtoken/auth_uri': value => $keystone_auth_uri;
|
||||
}
|
||||
} else {
|
||||
ceilometer_config {
|
||||
'keystone_authtoken/auth_uri': value => "${keystone_protocol}://${keystone_host}:5000/";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -12,13 +12,8 @@ class ceilometer::collector (
|
||||
|
||||
Ceilometer_config<||> ~> Service['ceilometer-collector']
|
||||
|
||||
Package['ceilometer-collector'] -> Service['ceilometer-collector']
|
||||
package { 'ceilometer-collector':
|
||||
ensure => installed,
|
||||
name => $::ceilometer::params::collector_package_name,
|
||||
}
|
||||
|
||||
tweaks::ubuntu_service_override { 'ceilometer-collector' :}
|
||||
Package[$::ceilometer::params::collector_package_name] -> Service['ceilometer-collector']
|
||||
ensure_packages([$::ceilometer::params::collector_package_name])
|
||||
|
||||
if $enabled {
|
||||
$service_ensure = 'running'
|
||||
@ -36,11 +31,4 @@ class ceilometer::collector (
|
||||
require => Class['ceilometer::db'],
|
||||
subscribe => Exec['ceilometer-dbsync']
|
||||
}
|
||||
Package<| title == 'ceilometer-collector' or title == 'ceilometer-common'|> ~>
|
||||
Service<| title == 'ceilometer-collector'|>
|
||||
if !defined(Service['ceilometer-collector']) {
|
||||
notify{ "Module ${module_name} cannot notify service ceilometer-collector\
|
||||
on packages update": }
|
||||
}
|
||||
|
||||
}
|
||||
|
31
deployment/puppet/ceilometer/manifests/config.pp
Normal file
31
deployment/puppet/ceilometer/manifests/config.pp
Normal file
@ -0,0 +1,31 @@
|
||||
# == Class: ceilometer::config
|
||||
#
|
||||
# This class is used to manage arbitrary ceilometer configurations.
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# [*ceilometer_config*]
|
||||
# (optional) Allow configuration of ceilometer.conf.
|
||||
#
|
||||
# The value is an hash of ceilometer_config resource. Example:
|
||||
# { 'DEFAULT/foo' => { value => 'fooValue'},
|
||||
# 'DEFAULT/bar' => { value => 'barValue'}
|
||||
# }
|
||||
#
|
||||
# In yaml format, Example:
|
||||
# ceilometer_config:
|
||||
# DEFAULT/foo:
|
||||
# value: fooValue
|
||||
# DEFAULT/bar:
|
||||
# value: barValue
|
||||
#
|
||||
# NOTE: The configuration MUST NOT be already handled by this module
|
||||
# or Puppet catalog compilation will fail with duplicate resources.
|
||||
#
|
||||
class ceilometer::config (
|
||||
$ceilometer_config = {},
|
||||
) {
|
||||
validate_hash($ceilometer_config)
|
||||
|
||||
create_resources('ceilometer_config', $ceilometer_config)
|
||||
}
|
@ -6,8 +6,18 @@
|
||||
# [*database_connection*]
|
||||
# the connection string. format: [driver]://[user]:[password]@[host]/[database]
|
||||
#
|
||||
# [*sync_db*]
|
||||
# enable dbsync.
|
||||
#
|
||||
# [*mysql_module*]
|
||||
# (optional) Mysql puppet module version to use. Tested versions
|
||||
# are 0.9 and 2.2
|
||||
# Defaults to '0.9
|
||||
#
|
||||
class ceilometer::db (
|
||||
$database_connection = 'mysql://ceilometer:ceilometer@localhost/ceilometer'
|
||||
$database_connection = 'mysql://ceilometer:ceilometer@localhost/ceilometer',
|
||||
$sync_db = true,
|
||||
$mysql_module = '0.9',
|
||||
) {
|
||||
|
||||
include ceilometer::params
|
||||
@ -15,27 +25,38 @@ class ceilometer::db (
|
||||
Package<| title == 'ceilometer-common' |> -> Class['ceilometer::db']
|
||||
|
||||
validate_re($database_connection,
|
||||
'(sqlite|mysql|posgres|mongodb):\/\/(\S+:\S+@\S+\/\S+)?')
|
||||
'(sqlite|mysql|postgresql|mongodb):\/\/(\S+:\S+@\S+\/\S+)?')
|
||||
|
||||
case $database_connection {
|
||||
/^mysql:\/\//: {
|
||||
$backend_package = false
|
||||
include mysql::python
|
||||
|
||||
if ($mysql_module >= 2.2) {
|
||||
include mysql::bindings::python
|
||||
} else {
|
||||
include mysql::python
|
||||
}
|
||||
}
|
||||
/^postgres:\/\//: {
|
||||
$backend_package = 'python-psycopg2'
|
||||
$backend_package = $::ceilometer::params::psycopg_package_name
|
||||
}
|
||||
/^mongodb:\/\//: {
|
||||
$backend_package = 'python-pymongo'
|
||||
$backend_package = $::ceilometer::params::pymongo_package_name
|
||||
}
|
||||
/^sqlite:\/\//: {
|
||||
$backend_package = 'python-pysqlite2'
|
||||
$backend_package = $::ceilometer::params::sqlite_package_name
|
||||
}
|
||||
default: {
|
||||
fail('Unsupported backend configured')
|
||||
}
|
||||
}
|
||||
|
||||
if $sync_db {
|
||||
$command = $::ceilometer::params::dbsync_command
|
||||
} else {
|
||||
$command = '/bin/true'
|
||||
}
|
||||
|
||||
if $backend_package and !defined(Package[$backend_package]) {
|
||||
package {'ceilometer-backend-package':
|
||||
ensure => present,
|
||||
@ -45,15 +66,14 @@ class ceilometer::db (
|
||||
|
||||
ceilometer_config {
|
||||
'database/connection': value => $database_connection;
|
||||
'database/max_retries': value => "-1";
|
||||
}
|
||||
|
||||
Ceilometer_config['database/connection'] ~> Exec['ceilometer-dbsync']
|
||||
|
||||
exec { 'ceilometer-dbsync':
|
||||
command => $::ceilometer::params::dbsync_command,
|
||||
command => $command,
|
||||
path => '/usr/bin',
|
||||
user => $::ceilometer::params::username,
|
||||
user => $::ceilometer::params::user,
|
||||
refreshonly => true,
|
||||
logoutput => on_failure,
|
||||
subscribe => Ceilometer_config['database/connection']
|
||||
|
@ -23,6 +23,14 @@
|
||||
# [*charset*]
|
||||
# the database charset. Optional. Defaults to 'latin1'
|
||||
#
|
||||
# [*collate*]
|
||||
# the database collation. Optional. Defaults to 'latin1_swedish_ci'
|
||||
#
|
||||
# [*mysql_module*]
|
||||
# (optional) Mysql module version to use. Tested versions
|
||||
# are 0.9 and 2.2
|
||||
# Defaults to '0.9'
|
||||
#
|
||||
class ceilometer::db::mysql(
|
||||
$password = false,
|
||||
$dbname = 'ceilometer',
|
||||
@ -30,6 +38,8 @@ class ceilometer::db::mysql(
|
||||
$host = 'localhost',
|
||||
$allowed_hosts = undef,
|
||||
$charset = 'latin1',
|
||||
$collate = 'latin1_swedish_ci',
|
||||
$mysql_module = '0.9',
|
||||
) {
|
||||
|
||||
validate_string($password)
|
||||
@ -38,20 +48,38 @@ class ceilometer::db::mysql(
|
||||
Class['ceilometer::db::mysql'] -> Exec<| title == 'ceilometer-dbsync' |>
|
||||
Mysql::Db[$dbname] ~> Exec<| title == 'ceilometer-dbsync' |>
|
||||
|
||||
mysql::db { $dbname:
|
||||
user => $user,
|
||||
password => $password,
|
||||
host => $host,
|
||||
charset => $charset,
|
||||
#require => Class['mysql::config'],
|
||||
require => Class['mysql::server'],
|
||||
if $mysql_module >= 2.2 {
|
||||
mysql::db { $dbname:
|
||||
user => $user,
|
||||
password => $password,
|
||||
host => $host,
|
||||
charset => $charset,
|
||||
collate => $collate,
|
||||
require => Class['mysql::server'],
|
||||
}
|
||||
} else {
|
||||
mysql::db { $dbname:
|
||||
user => $user,
|
||||
password => $password,
|
||||
host => $host,
|
||||
charset => $charset,
|
||||
require => Class['mysql::config'],
|
||||
}
|
||||
}
|
||||
|
||||
if $allowed_hosts {
|
||||
ceilometer::db::mysql::host_access { $allowed_hosts:
|
||||
user => $user,
|
||||
password => $password,
|
||||
database => $dbname,
|
||||
# Check allowed_hosts to avoid duplicate resource declarations
|
||||
if is_array($allowed_hosts) and delete($allowed_hosts,$host) != [] {
|
||||
$real_allowed_hosts = delete($allowed_hosts,$host)
|
||||
} elsif is_string($allowed_hosts) and ($allowed_hosts != $host) {
|
||||
$real_allowed_hosts = $allowed_hosts
|
||||
}
|
||||
|
||||
if $real_allowed_hosts {
|
||||
ceilometer::db::mysql::host_access { $real_allowed_hosts:
|
||||
user => $user,
|
||||
password => $password,
|
||||
database => $dbname,
|
||||
mysql_module => $mysql_module,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,18 +13,35 @@
|
||||
# [*database*]
|
||||
# the database name
|
||||
#
|
||||
define ceilometer::db::mysql::host_access ($user, $password, $database) {
|
||||
define ceilometer::db::mysql::host_access ($user, $password, $database, $mysql_module='0.9') {
|
||||
# New types for mysql module v2.0+
|
||||
if ($mysql_module >= 2.2) {
|
||||
mysql_user { "${user}@${name}":
|
||||
password_hash => mysql_password($password),
|
||||
provider => 'mysql',
|
||||
require => Mysql_database[$database],
|
||||
}
|
||||
|
||||
database_user { "${user}@${name}":
|
||||
password_hash => mysql_password($password),
|
||||
provider => 'mysql',
|
||||
require => Database[$database],
|
||||
}
|
||||
mysql_grant { "${user}@${name}/${database}":
|
||||
privileges => 'all',
|
||||
provider => 'mysql',
|
||||
table => "${database}.*",
|
||||
user => "${user}@${name}",
|
||||
require => Mysql_user["${user}@${name}"]
|
||||
}
|
||||
|
||||
database_grant { "${user}@${name}/${database}":
|
||||
# TODO figure out which privileges to grant.
|
||||
privileges => 'all',
|
||||
provider => 'mysql',
|
||||
require => Database_user["${user}@${name}"]
|
||||
} else {
|
||||
database_user { "${user}@${name}":
|
||||
password_hash => mysql_password($password),
|
||||
provider => 'mysql',
|
||||
require => Database[$database],
|
||||
}
|
||||
|
||||
database_grant { "${user}@${name}/${database}":
|
||||
# TODO figure out which privileges to grant.
|
||||
privileges => 'all',
|
||||
provider => 'mysql',
|
||||
require => Database_user["${user}@${name}"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
74
deployment/puppet/ceilometer/manifests/expirer.pp
Normal file
74
deployment/puppet/ceilometer/manifests/expirer.pp
Normal file
@ -0,0 +1,74 @@
|
||||
#
|
||||
# Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
|
||||
#
|
||||
# Author: Emilien Macchi <emilien.macchi@enovance.com>
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# == Class: ceilometer::expirer
|
||||
#
|
||||
# Setups Ceilometer Expirer service to enable TTL feature.
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# [*time_to_live*]
|
||||
# (optional) Number of seconds that samples are kept in the database.
|
||||
# Should be a valid integer
|
||||
# Defaults to '-1' to disable TTL and keep forever the datas.
|
||||
#
|
||||
# [*minute*]
|
||||
# (optional) Defaults to '1'.
|
||||
#
|
||||
# [*hour*]
|
||||
# (optional) Defaults to '0'.
|
||||
#
|
||||
# [*monthday*]
|
||||
# (optional) Defaults to '*'.
|
||||
#
|
||||
# [*month*]
|
||||
# (optional) Defaults to '*'.
|
||||
#
|
||||
# [*weekday*]
|
||||
# (optional) Defaults to '*'.
|
||||
#
|
||||
|
||||
class ceilometer::expirer (
|
||||
$time_to_live = '-1',
|
||||
$minute = 1,
|
||||
$hour = 0,
|
||||
$monthday = '*',
|
||||
$month = '*',
|
||||
$weekday = '*',
|
||||
) {
|
||||
|
||||
include ceilometer::params
|
||||
|
||||
Package<| title == 'ceilometer-common' |> -> Class['ceilometer::expirer']
|
||||
|
||||
ceilometer_config {
|
||||
'database/time_to_live': value => $time_to_live;
|
||||
}
|
||||
|
||||
cron { 'ceilometer-expirer':
|
||||
command => $ceilometer::params::expirer_command,
|
||||
environment => 'PATH=/bin:/usr/bin:/usr/sbin',
|
||||
user => 'ceilometer',
|
||||
minute => $minute,
|
||||
hour => $hour,
|
||||
monthday => $monthday,
|
||||
month => $month,
|
||||
weekday => $weekday
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -7,45 +7,104 @@
|
||||
# secret key for signing messages. Mandatory.
|
||||
# [*package_ensure*]
|
||||
# ensure state for package. Optional. Defaults to 'present'
|
||||
# [*verbose*]
|
||||
# should the daemons log verbose messages. Optional. Defaults to false
|
||||
# [*debug*]
|
||||
# should the daemons log debug messages. Optional. Defaults to false
|
||||
# should the daemons log debug messages. Optional. Defaults to 'False'
|
||||
# [*log_dir*]
|
||||
# (optional) directory to which ceilometer logs are sent.
|
||||
# If set to boolean false, it will not log to any directory.
|
||||
# Defaults to '/var/log/ceilometer'
|
||||
# (optional) directory to which ceilometer logs are sent.
|
||||
# If set to boolean false, it will not log to any directory.
|
||||
# Defaults to '/var/log/ceilometer'
|
||||
# [*verbose*]
|
||||
# should the daemons log verbose messages. Optional. Defaults to 'False'
|
||||
# [*use_syslog*]
|
||||
# (optional) Use syslog for logging
|
||||
# Defaults to false
|
||||
# [*syslog_log_facility*]
|
||||
# (optional) Syslog facility to receive log lines.
|
||||
# Defaults to 'LOG_LOCAL0'
|
||||
# [*amqp_hosts*]
|
||||
# AMQP servers connection string. Optional. Defaults to '127.0.0.1'
|
||||
# [*amqp_user*]
|
||||
# user to connect to the AMQP server. Optional. Defaults to 'guest'
|
||||
# [*amqp_password*]
|
||||
# password to connect to the amqp_hosts. Optional. Defaults to 'rabbit_pw'.
|
||||
# [*rabbit_ha_queues*]
|
||||
# create mirrored queues. Optional. Defaults to false
|
||||
# (optional) Use syslog for logging
|
||||
# Defaults to false
|
||||
# [*log_facility*]
|
||||
# (optional) Syslog facility to receive log lines.
|
||||
# Defaults to 'LOG_USER'
|
||||
# [*rpc_backend*]
|
||||
# (optional) what rpc/queuing service to use
|
||||
# Defaults to impl_kombu (rabbitmq)
|
||||
# [*rabbit_host*]
|
||||
# ip or hostname of the rabbit server. Optional. Defaults to '127.0.0.1'
|
||||
# [*rabbit_port*]
|
||||
# port of the rabbit server. Optional. Defaults to 5672.
|
||||
# [*rabbit_hosts*]
|
||||
# array of host:port (used with HA queues). Optional. Defaults to undef.
|
||||
# If defined, will remove rabbit_host & rabbit_port parameters from config
|
||||
# [*rabbit_userid*]
|
||||
# user to connect to the rabbit server. Optional. Defaults to 'guest'
|
||||
# [*rabbit_password*]
|
||||
# password to connect to the rabbit_server. Optional. Defaults to empty.
|
||||
# [*rabbit_virtual_host*]
|
||||
# virtualhost to use. Optional. Defaults to '/'
|
||||
# [*rabbit_use_ssl*]
|
||||
# (optional) Connect over SSL for RabbitMQ
|
||||
# Defaults to false
|
||||
# [*kombu_ssl_ca_certs*]
|
||||
# (optional) SSL certification authority file (valid only if SSL enabled).
|
||||
# Defaults to undef
|
||||
# [*kombu_ssl_certfile*]
|
||||
# (optional) SSL cert file (valid only if SSL enabled).
|
||||
# Defaults to undef
|
||||
# [*kombu_ssl_keyfile*]
|
||||
# (optional) SSL key file (valid only if SSL enabled).
|
||||
# Defaults to undef
|
||||
# [*kombu_ssl_version*]
|
||||
# (optional) SSL version to use (valid only if SSL enabled).
|
||||
# Valid values are TLSv1, SSLv23 and SSLv3. SSLv2 may be
|
||||
# available on some distributions.
|
||||
# Defaults to 'SSLv3'
|
||||
#
|
||||
# [*qpid_hostname*]
|
||||
# [*qpid_port*]
|
||||
# [*qpid_username*]
|
||||
# [*qpid_password*]
|
||||
# [*qpid_heartbeat*]
|
||||
# [*qpid_protocol*]
|
||||
# [*qpid_tcp_nodelay*]
|
||||
# [*qpid_reconnect*]
|
||||
# [*qpid_reconnect_timeout*]
|
||||
# [*qpid_reconnect_limit*]
|
||||
# [*qpid_reconnect_interval*]
|
||||
# [*qpid_reconnect_interval_min*]
|
||||
# [*qpid_reconnect_interval_max*]
|
||||
# (optional) various QPID options
|
||||
#
|
||||
|
||||
class ceilometer(
|
||||
$metering_secret = false,
|
||||
$notification_topics = ['notifications'],
|
||||
$package_ensure = 'present',
|
||||
$verbose = false,
|
||||
$debug = false,
|
||||
$log_dir = '/var/log/ceilometer',
|
||||
$verbose = false,
|
||||
$use_syslog = false,
|
||||
$syslog_log_facility = 'LOG_LOCAL0',
|
||||
$queue_provider = 'rabbitmq',
|
||||
$amqp_hosts = '127.0.0.1',
|
||||
$amqp_user = 'guest',
|
||||
$amqp_password = 'rabbit_pw',
|
||||
$rabbit_ha_queues = false,
|
||||
$log_facility = 'LOG_USER',
|
||||
$rpc_backend = 'ceilometer.openstack.common.rpc.impl_kombu',
|
||||
$rabbit_host = '127.0.0.1',
|
||||
$rabbit_port = 5672,
|
||||
$rabbit_hosts = undef,
|
||||
$rabbit_userid = 'guest',
|
||||
$rabbit_password = '',
|
||||
$rabbit_virtual_host = '/',
|
||||
$rabbit_use_ssl = false,
|
||||
$kombu_ssl_ca_certs = undef,
|
||||
$kombu_ssl_certfile = undef,
|
||||
$kombu_ssl_keyfile = undef,
|
||||
$kombu_ssl_version = 'SSLv3',
|
||||
$qpid_hostname = 'localhost',
|
||||
$qpid_port = 5672,
|
||||
$qpid_username = 'guest',
|
||||
$qpid_password = 'guest',
|
||||
$qpid_heartbeat = 60,
|
||||
$qpid_protocol = 'tcp',
|
||||
$qpid_tcp_nodelay = true,
|
||||
$qpid_reconnect = true,
|
||||
$qpid_reconnect_timeout = 0,
|
||||
$qpid_reconnect_limit = 0,
|
||||
$qpid_reconnect_interval_min = 0,
|
||||
$qpid_reconnect_interval_max = 0,
|
||||
$qpid_reconnect_interval = 0
|
||||
) {
|
||||
|
||||
validate_string($metering_secret)
|
||||
@ -64,7 +123,6 @@ class ceilometer(
|
||||
user { 'ceilometer':
|
||||
name => 'ceilometer',
|
||||
gid => 'ceilometer',
|
||||
groups => ['nova'],
|
||||
system => true,
|
||||
require => Package['ceilometer-common'],
|
||||
}
|
||||
@ -89,42 +147,102 @@ class ceilometer(
|
||||
|
||||
Package['ceilometer-common'] -> Ceilometer_config<||>
|
||||
|
||||
# Configure RPC
|
||||
case $queue_provider {
|
||||
'rabbitmq': {
|
||||
ceilometer_config {
|
||||
'DEFAULT/rabbit_hosts': value => $amqp_hosts;
|
||||
'DEFAULT/rabbit_userid': value => $amqp_user;
|
||||
'DEFAULT/rabbit_password': value => $amqp_password;
|
||||
'DEFAULT/rabbit_virtual_host': value => $rabbit_virtual_host;
|
||||
'DEFAULT/rabbit_ha_queues': value => $rabbit_ha_queues;
|
||||
'DEFAULT/kombu_reconnect_delay': value => '5.0';
|
||||
'DEFAULT/rpc_backend':
|
||||
value => 'ceilometer.openstack.common.rpc.impl_kombu';
|
||||
if $rpc_backend == 'ceilometer.openstack.common.rpc.impl_kombu' {
|
||||
|
||||
if $rabbit_hosts {
|
||||
ceilometer_config { 'DEFAULT/rabbit_host': ensure => absent }
|
||||
ceilometer_config { 'DEFAULT/rabbit_port': ensure => absent }
|
||||
ceilometer_config { 'DEFAULT/rabbit_hosts':
|
||||
value => join($rabbit_hosts, ',')
|
||||
}
|
||||
} else {
|
||||
ceilometer_config { 'DEFAULT/rabbit_host': value => $rabbit_host }
|
||||
ceilometer_config { 'DEFAULT/rabbit_port': value => $rabbit_port }
|
||||
ceilometer_config { 'DEFAULT/rabbit_hosts':
|
||||
value => "${rabbit_host}:${rabbit_port}"
|
||||
}
|
||||
}
|
||||
|
||||
'qpid': {
|
||||
ceilometer_config {
|
||||
'DEFAULT/qpid_hosts': value => $amqp_hosts;
|
||||
'DEFAULT/qpid_username': value => $amqp_user;
|
||||
'DEFAULT/qpid_password': value => $amqp_password;
|
||||
'DEFAULT/rpc_backend':
|
||||
value => 'ceilometer.openstack.common.rpc.impl_qpid';
|
||||
if size($rabbit_hosts) > 1 {
|
||||
ceilometer_config { 'DEFAULT/rabbit_ha_queues': value => true }
|
||||
} else {
|
||||
ceilometer_config { 'DEFAULT/rabbit_ha_queues': value => false }
|
||||
}
|
||||
|
||||
ceilometer_config {
|
||||
'DEFAULT/rabbit_userid' : value => $rabbit_userid;
|
||||
'DEFAULT/rabbit_password' : value => $rabbit_password;
|
||||
'DEFAULT/rabbit_virtual_host' : value => $rabbit_virtual_host;
|
||||
'DEFAULT/rabbit_use_ssl' : value => $rabbit_use_ssl;
|
||||
}
|
||||
|
||||
if $rabbit_use_ssl {
|
||||
if $kombu_ssl_ca_certs {
|
||||
ceilometer_config { 'DEFAULT/kombu_ssl_ca_certs': value => $kombu_ssl_ca_certs }
|
||||
} else {
|
||||
ceilometer_config { 'DEFAULT/kombu_ssl_ca_certs': ensure => absent}
|
||||
}
|
||||
|
||||
if $kombu_ssl_certfile {
|
||||
ceilometer_config { 'DEFAULT/kombu_ssl_certfile': value => $kombu_ssl_certfile }
|
||||
} else {
|
||||
ceilometer_config { 'DEFAULT/kombu_ssl_certfile': ensure => absent}
|
||||
}
|
||||
|
||||
if $kombu_ssl_keyfile {
|
||||
ceilometer_config { 'DEFAULT/kombu_ssl_keyfile': value => $kombu_ssl_keyfile }
|
||||
} else {
|
||||
ceilometer_config { 'DEFAULT/kombu_ssl_keyfile': ensure => absent}
|
||||
}
|
||||
|
||||
if $kombu_ssl_version {
|
||||
ceilometer_config { 'DEFAULT/kombu_ssl_version': value => $kombu_ssl_version }
|
||||
} else {
|
||||
ceilometer_config { 'DEFAULT/kombu_ssl_version': ensure => absent}
|
||||
}
|
||||
} else {
|
||||
ceilometer_config {
|
||||
'DEFAULT/kombu_ssl_ca_certs': ensure => absent;
|
||||
'DEFAULT/kombu_ssl_certfile': ensure => absent;
|
||||
'DEFAULT/kombu_ssl_keyfile': ensure => absent;
|
||||
'DEFAULT/kombu_ssl_version': ensure => absent;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if $rpc_backend == 'ceilometer.openstack.common.rpc.impl_qpid' {
|
||||
|
||||
ceilometer_config {
|
||||
'DEFAULT/qpid_hostname' : value => $qpid_hostname;
|
||||
'DEFAULT/qpid_port' : value => $qpid_port;
|
||||
'DEFAULT/qpid_username' : value => $qpid_username;
|
||||
'DEFAULT/qpid_password' : value => $qpid_password;
|
||||
'DEFAULT/qpid_heartbeat' : value => $qpid_heartbeat;
|
||||
'DEFAULT/qpid_protocol' : value => $qpid_protocol;
|
||||
'DEFAULT/qpid_tcp_nodelay' : value => $qpid_tcp_nodelay;
|
||||
'DEFAULT/qpid_reconnect' : value => $qpid_reconnect;
|
||||
'DEFAULT/qpid_reconnect_timeout' : value => $qpid_reconnect_timeout;
|
||||
'DEFAULT/qpid_reconnect_limit' : value => $qpid_reconnect_limit;
|
||||
'DEFAULT/qpid_reconnect_interval_min': value => $qpid_reconnect_interval_min;
|
||||
'DEFAULT/qpid_reconnect_interval_max': value => $qpid_reconnect_interval_max;
|
||||
'DEFAULT/qpid_reconnect_interval' : value => $qpid_reconnect_interval;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
# Once we got here, we can act as an honey badger on the rpc used.
|
||||
ceilometer_config {
|
||||
'publisher_rpc/metering_secret' : value => $metering_secret;
|
||||
'DEFAULT/rpc_backend' : value => $rpc_backend;
|
||||
'publisher/metering_secret' : value => $metering_secret;
|
||||
'DEFAULT/debug' : value => $debug;
|
||||
'DEFAULT/verbose' : value => $verbose;
|
||||
'DEFAULT/notification_topics' : value => join($notification_topics, ',');
|
||||
}
|
||||
|
||||
# Log configuration
|
||||
# Log configuration
|
||||
if $log_dir {
|
||||
ceilometer_config {
|
||||
'DEFAULT/log_dir' : value => $log_dir;
|
||||
'DEFAULT/log_dir' : value => $log_dir;
|
||||
}
|
||||
} else {
|
||||
ceilometer_config {
|
||||
@ -135,13 +253,13 @@ class ceilometer(
|
||||
# Syslog configuration
|
||||
if $use_syslog {
|
||||
ceilometer_config {
|
||||
'DEFAULT/use_syslog': value => true;
|
||||
'DEFAULT/use_syslog_rfc_format': value => true;
|
||||
'DEFAULT/syslog_log_facility': value => $syslog_log_facility;
|
||||
'DEFAULT/use_syslog': value => true;
|
||||
'DEFAULT/syslog_log_facility': value => $log_facility;
|
||||
}
|
||||
} else {
|
||||
ceilometer_config {
|
||||
'DEFAULT/use_syslog': value => false;
|
||||
'DEFAULT/use_syslog': value => false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -29,7 +29,7 @@
|
||||
# Internal address for endpoint. Optional. Defaults to '127.0.0.1'.
|
||||
#
|
||||
# [*port*]
|
||||
# Port for endpoint. Optional. Defaults to '8777'.
|
||||
# Default port for enpoints. Optional. Defaults to '8777'.
|
||||
#
|
||||
# [*region*]
|
||||
# Region for endpoint. Optional. Defaults to 'RegionOne'.
|
||||
@ -37,9 +37,36 @@
|
||||
# [*tenant*]
|
||||
# Tenant for Ceilometer user. Optional. Defaults to 'services'.
|
||||
#
|
||||
# [*protocol*]
|
||||
# [*public_protocol*]
|
||||
# Protocol for public endpoint. Optional. Defaults to 'http'.
|
||||
#
|
||||
# [*admin_protocol*]
|
||||
# Protocol for admin endpoint. Optional. Defaults to 'http'.
|
||||
#
|
||||
# [*internal_protocol*]
|
||||
# Protocol for public endpoint. Optional. Defaults to 'http'.
|
||||
#
|
||||
# [*public_url*]
|
||||
# The endpoint's public url.
|
||||
# Optional. Defaults to $public_protocol://$public_address:$port
|
||||
# This url should *not* contain any API version and should have
|
||||
# no trailing '/'
|
||||
# Setting this variable overrides other $public_* parameters.
|
||||
#
|
||||
# [*admin_url*]
|
||||
# The endpoint's admin url.
|
||||
# Optional. Defaults to $admin_protocol://$admin_address:$port
|
||||
# This url should *not* contain any API version and should have
|
||||
# no trailing '/'
|
||||
# Setting this variable overrides other $admin_* parameters.
|
||||
#
|
||||
# [*internal_url*]
|
||||
# The endpoint's internal url.
|
||||
# Optional. Defaults to $internal_protocol://$internal_address:$port
|
||||
# This url should *not* contain any API version and should have
|
||||
# no trailing '/'
|
||||
# Setting this variable overrides other $internal_* parameters.
|
||||
#
|
||||
class ceilometer::keystone::auth (
|
||||
$password = false,
|
||||
$email = 'ceilometer@localhost',
|
||||
@ -51,17 +78,37 @@ class ceilometer::keystone::auth (
|
||||
$port = '8777',
|
||||
$region = 'RegionOne',
|
||||
$tenant = 'services',
|
||||
$api_protocol = 'http',
|
||||
# $public_protocol = $api_protocol,
|
||||
# $admin_protocol = $api_protocol,
|
||||
# $internal_protocol = $api_protocol,
|
||||
$configure_endpoint = true
|
||||
$public_protocol = 'http',
|
||||
$admin_protocol = 'http',
|
||||
$internal_protocol = 'http',
|
||||
$configure_endpoint = true,
|
||||
$public_url = undef,
|
||||
$admin_url = undef,
|
||||
$internal_url = undef,
|
||||
) {
|
||||
|
||||
validate_string($password)
|
||||
|
||||
if $public_url {
|
||||
$public_url_real = $public_url
|
||||
} else {
|
||||
$public_url_real = "${public_protocol}://${public_address}:${port}"
|
||||
}
|
||||
|
||||
if $admin_url {
|
||||
$admin_url_real = $admin_url
|
||||
} else {
|
||||
$admin_url_real = "${admin_protocol}://${admin_address}:${port}"
|
||||
}
|
||||
|
||||
if $internal_url {
|
||||
$internal_url_real = $internal_url
|
||||
} else {
|
||||
$internal_url_real = "${internal_protocol}://${internal_address}:${port}"
|
||||
}
|
||||
|
||||
Keystone_user_role["${auth_name}@${tenant}"] ~>
|
||||
Service <| title == 'ceilometer-api' |>
|
||||
Service <| name == 'ceilometer-api' |>
|
||||
|
||||
keystone_user { $auth_name:
|
||||
ensure => present,
|
||||
@ -85,16 +132,11 @@ class ceilometer::keystone::auth (
|
||||
description => 'Openstack Metering Service',
|
||||
}
|
||||
if $configure_endpoint {
|
||||
$public_protocol = $api_protocol
|
||||
$admin_protocol = $api_protocol
|
||||
$internal_protocol = $api_protocol
|
||||
|
||||
keystone_endpoint { "${auth_name}":
|
||||
region => $region,
|
||||
keystone_endpoint { "${region}/${auth_name}":
|
||||
ensure => present,
|
||||
public_url => "${public_protocol}://${public_address}:${port}",
|
||||
admin_url => "${admin_protocol}://${admin_address}:${port}",
|
||||
internal_url => "${internal_protocol}://${internal_address}:${port}",
|
||||
public_url => $public_url_real,
|
||||
admin_url => $admin_url_real,
|
||||
internal_url => $internal_url_real,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,52 +2,64 @@
|
||||
#
|
||||
class ceilometer::params {
|
||||
|
||||
$dbsync_command =
|
||||
'ceilometer-dbsync --config-file=/etc/ceilometer/ceilometer.conf'
|
||||
|
||||
# ssl keys/certs
|
||||
$ssl_cert_file = '/etc/keystone/ssl/certs/signing_cert.pem'
|
||||
$ssl_key_file = '/etc/keystone/ssl/private/signing_key.pem'
|
||||
$ssl_ca_file = '/etc/keystone/ssl/certs/ca.pem'
|
||||
$dbsync_command = 'ceilometer-dbsync --config-file=/etc/ceilometer/ceilometer.conf'
|
||||
$expirer_command = 'ceilometer-expirer'
|
||||
$user = 'ceilometer'
|
||||
|
||||
case $::osfamily {
|
||||
'RedHat': {
|
||||
# package names
|
||||
$agent_central_package_name = 'openstack-ceilometer-central'
|
||||
$agent_compute_package_name = 'openstack-ceilometer-compute'
|
||||
$api_package_name = 'openstack-ceilometer-api'
|
||||
$collector_package_name = 'openstack-ceilometer-collector'
|
||||
$common_package_name = 'openstack-ceilometer-common'
|
||||
$client_package_name = 'python-ceilometerclient'
|
||||
$alarm_package = 'openstack-ceilometer-alarm'
|
||||
$agent_notification_package = 'openstack-ceilometer-notification'
|
||||
$agent_central_package_name = 'openstack-ceilometer-central'
|
||||
$agent_compute_package_name = 'openstack-ceilometer-compute'
|
||||
$api_package_name = 'openstack-ceilometer-api'
|
||||
$collector_package_name = 'openstack-ceilometer-collector'
|
||||
$agent_notification_package_name = 'openstack-ceilometer-collector'
|
||||
# notification agent is included in collector package:
|
||||
$alarm_package_name = ['openstack-ceilometer-alarm']
|
||||
$common_package_name = 'openstack-ceilometer-common'
|
||||
$client_package_name = 'python-ceilometerclient'
|
||||
# service names
|
||||
$agent_central_service_name = 'openstack-ceilometer-central'
|
||||
$agent_compute_service_name = 'openstack-ceilometer-compute'
|
||||
$api_service_name = 'openstack-ceilometer-api'
|
||||
$collector_service_name = 'openstack-ceilometer-collector'
|
||||
$alarm_evaluator_service = 'openstack-ceilometer-alarm-evaluator'
|
||||
$alarm_notifier_service = 'openstack-ceilometer-alarm-notifier'
|
||||
$agent_notification_service = 'openstack-ceilometer-notification'
|
||||
$agent_central_service_name = 'openstack-ceilometer-central'
|
||||
$agent_compute_service_name = 'openstack-ceilometer-compute'
|
||||
$api_service_name = 'openstack-ceilometer-api'
|
||||
$collector_service_name = 'openstack-ceilometer-collector'
|
||||
$agent_notification_service_name = 'openstack-ceilometer-agent-notification'
|
||||
$alarm_notifier_service_name = 'openstack-ceilometer-alarm-notifier'
|
||||
$alarm_evaluator_service_name = 'openstack-ceilometer-alarm-evaluator'
|
||||
$pymongo_package_name = 'python-pymongo'
|
||||
$psycopg_package_name = 'python-psycopg2'
|
||||
# db packages
|
||||
if $::operatingsystem == 'Fedora' and $::operatingsystemrelease >= 18 {
|
||||
# fallback to stdlib version, not provided on fedora
|
||||
$sqlite_package_name = undef
|
||||
} else {
|
||||
$sqlite_package_name = 'python-sqlite2'
|
||||
}
|
||||
|
||||
}
|
||||
'Debian': {
|
||||
# package names
|
||||
$agent_central_package_name = 'ceilometer-agent-central'
|
||||
$agent_compute_package_name = 'ceilometer-agent-compute'
|
||||
$api_package_name = 'ceilometer-api'
|
||||
$collector_package_name = 'ceilometer-collector'
|
||||
$common_package_name = 'ceilometer-common'
|
||||
$client_package_name = 'python-ceilometerclient'
|
||||
$alarm_package = ['ceilometer-alarm-notifier', 'ceilometer-alarm-evaluator']
|
||||
$agent_notification_package = 'ceilometer-agent-notification'
|
||||
$agent_central_package_name = 'ceilometer-agent-central'
|
||||
$agent_compute_package_name = 'ceilometer-agent-compute'
|
||||
$api_package_name = 'ceilometer-api'
|
||||
$collector_package_name = 'ceilometer-collector'
|
||||
$agent_notification_package_name = 'ceilometer-agent-notification'
|
||||
$common_package_name = 'ceilometer-common'
|
||||
$client_package_name = 'python-ceilometerclient'
|
||||
$alarm_package_name = ['ceilometer-alarm-notifier','ceilometer-alarm-evaluator']
|
||||
# service names
|
||||
$agent_central_service_name = 'ceilometer-agent-central'
|
||||
$agent_compute_service_name = 'ceilometer-agent-compute'
|
||||
$api_service_name = 'ceilometer-api'
|
||||
$collector_service_name = 'ceilometer-collector'
|
||||
$alarm_evaluator_service = 'ceilometer-alarm-evaluator'
|
||||
$alarm_notifier_service = 'ceilometer-alarm-notifier'
|
||||
$agent_notification_service = 'ceilometer-agent-notification'
|
||||
$agent_central_service_name = 'ceilometer-agent-central'
|
||||
$agent_compute_service_name = 'ceilometer-agent-compute'
|
||||
$collector_service_name = 'ceilometer-collector'
|
||||
$api_service_name = 'ceilometer-api'
|
||||
$agent_notification_service_name = 'ceilometer-agent-notification'
|
||||
$alarm_notifier_service_name = 'ceilometer-alarm-notifier'
|
||||
$alarm_evaluator_service_name = 'ceilometer-alarm-evaluator'
|
||||
# db packages
|
||||
$pymongo_package_name = 'python-pymongo'
|
||||
$psycopg_package_name = 'python-psycopg2'
|
||||
$sqlite_package_name = 'python-pysqlite2'
|
||||
|
||||
# Operating system specific
|
||||
case $::operatingsystem {
|
||||
'Ubuntu': {
|
||||
|
@ -0,0 +1,39 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'ceilometer::agent::auth' do
|
||||
|
||||
let :pre_condition do
|
||||
"class { 'ceilometer': metering_secret => 's3cr3t' }"
|
||||
end
|
||||
|
||||
let :params do
|
||||
{ :auth_url => 'http://localhost:5000/v2.0',
|
||||
:auth_region => 'RegionOne',
|
||||
:auth_user => 'ceilometer',
|
||||
:auth_password => 'password',
|
||||
:auth_tenant_name => 'services',
|
||||
:enabled => true,
|
||||
}
|
||||
end
|
||||
|
||||
shared_examples_for 'ceilometer-agent-auth' do
|
||||
|
||||
it 'configures authentication' do
|
||||
should contain_ceilometer_config('service_credentials/os_auth_url').with_value('http://localhost:5000/v2.0')
|
||||
should contain_ceilometer_config('service_credentials/os_region_name').with_value('RegionOne')
|
||||
should contain_ceilometer_config('service_credentials/os_username').with_value('ceilometer')
|
||||
should contain_ceilometer_config('service_credentials/os_password').with_value('password')
|
||||
should contain_ceilometer_config('service_credentials/os_tenant_name').with_value('services')
|
||||
should contain_ceilometer_config('service_credentials/os_cacert').with(:ensure => 'absent')
|
||||
end
|
||||
|
||||
context 'when overriding parameters' do
|
||||
before do
|
||||
params.merge!(:auth_cacert => '/tmp/dummy.pem')
|
||||
end
|
||||
it { should contain_ceilometer_config('service_credentials/os_cacert').with_value(params[:auth_cacert]) }
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
@ -0,0 +1,68 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'ceilometer::agent::central' do
|
||||
|
||||
let :pre_condition do
|
||||
"class { 'ceilometer': metering_secret => 's3cr3t' }"
|
||||
end
|
||||
|
||||
let :params do
|
||||
{ :enabled => true }
|
||||
end
|
||||
|
||||
shared_examples_for 'ceilometer-agent-central' do
|
||||
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs ceilometer-agent-central package' do
|
||||
should contain_package('ceilometer-agent-central').with(
|
||||
:ensure => 'installed',
|
||||
:name => platform_params[:agent_package_name],
|
||||
:before => 'Service[ceilometer-agent-central]'
|
||||
)
|
||||
end
|
||||
|
||||
it 'ensures ceilometer-common is installed before the service' do
|
||||
should contain_package('ceilometer-common').with(
|
||||
:before => /Service\[ceilometer-agent-central\]/
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures ceilometer-agent-central service' do
|
||||
should contain_service('ceilometer-agent-central').with(
|
||||
:ensure => 'running',
|
||||
:name => platform_params[:agent_service_name],
|
||||
:enable => true,
|
||||
:hasstatus => true,
|
||||
:hasrestart => true
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context 'on Debian platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'Debian' }
|
||||
end
|
||||
|
||||
let :platform_params do
|
||||
{ :agent_package_name => 'ceilometer-agent-central',
|
||||
:agent_service_name => 'ceilometer-agent-central' }
|
||||
end
|
||||
|
||||
it_configures 'ceilometer-agent-central'
|
||||
end
|
||||
|
||||
context 'on RedHat platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'RedHat' }
|
||||
end
|
||||
|
||||
let :platform_params do
|
||||
{ :agent_package_name => 'openstack-ceilometer-central',
|
||||
:agent_service_name => 'openstack-ceilometer-central' }
|
||||
end
|
||||
|
||||
it_configures 'ceilometer-agent-central'
|
||||
end
|
||||
end
|
@ -9,18 +9,12 @@ describe 'ceilometer::agent::compute' do
|
||||
end
|
||||
|
||||
let :params do
|
||||
{ :auth_url => 'http://localhost:5000/v2.0',
|
||||
:auth_region => 'RegionOne',
|
||||
:auth_user => 'ceilometer',
|
||||
:auth_password => 'password',
|
||||
:auth_tenant_name => 'services',
|
||||
:enabled => true,
|
||||
}
|
||||
{ :enabled => true }
|
||||
end
|
||||
|
||||
shared_examples_for 'ceilometer-agent-compute' do
|
||||
|
||||
it { should include_class('ceilometer::params') }
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs ceilometer-agent-compute package' do
|
||||
should contain_package('ceilometer-agent-compute').with(
|
||||
@ -30,9 +24,11 @@ describe 'ceilometer::agent::compute' do
|
||||
)
|
||||
end
|
||||
|
||||
it 'adds ceilometer user to libvirt group if required' do
|
||||
it 'adds ceilometer user to nova group and, if required, to libvirt group' do
|
||||
if platform_params[:libvirt_group]
|
||||
should contain_user('ceilometer').with_groups(/#{platform_params[:libvirt_group]}/)
|
||||
should contain_user('ceilometer').with_groups(['nova', "#{platform_params[:libvirt_group]}"])
|
||||
else
|
||||
should contain_user('ceilometer').with_groups('nova')
|
||||
end
|
||||
end
|
||||
|
||||
@ -52,33 +48,20 @@ describe 'ceilometer::agent::compute' do
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures authentication' do
|
||||
should contain_ceilometer_config('DEFAULT/os_auth_url').with_value('http://localhost:5000/v2.0')
|
||||
should contain_ceilometer_config('DEFAULT/os_auth_region').with_value('RegionOne')
|
||||
should contain_ceilometer_config('DEFAULT/os_username').with_value('ceilometer')
|
||||
should contain_ceilometer_config('DEFAULT/os_password').with_value('password')
|
||||
should contain_ceilometer_config('DEFAULT/os_tenant_name').with_value('services')
|
||||
end
|
||||
|
||||
it 'configures instance usage audit in nova' do
|
||||
should contain_nova_config('DEFAULT/instance_usage_audit').with_value('True')
|
||||
should contain_nova_config('DEFAULT/instance_usage_audit_period').with_value('hour')
|
||||
end
|
||||
|
||||
it 'configures nova notification driver' do
|
||||
should contain_file_line('nova-notification-driver-common').with(
|
||||
should contain_file_line_after('nova-notification-driver-common').with(
|
||||
:line => 'notification_driver=nova.openstack.common.notifier.rpc_notifier',
|
||||
:path => '/etc/nova/nova.conf',
|
||||
:notify => 'Service[nova-compute]'
|
||||
)
|
||||
should contain_file_line('nova-notification-driver-ceilometer').with(
|
||||
should contain_file_line_after('nova-notification-driver-ceilometer').with(
|
||||
:line => 'notification_driver=ceilometer.compute.nova_notifier',
|
||||
:path => '/etc/nova/nova.conf',
|
||||
:notify => 'Service[nova-compute]'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context 'on Debian platforms' do
|
||||
let :facts do
|
||||
|
@ -0,0 +1,85 @@
|
||||
#
|
||||
# Copyright (C) 2014 eNovance SAS <licensing@enovance.com>
|
||||
#
|
||||
# Author: Emilien Macchi <emilien.macchi@enovance.com>
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# Unit tests for ceilometer::agent::notification
|
||||
#
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'ceilometer::agent::notification' do
|
||||
|
||||
let :pre_condition do
|
||||
"class { 'ceilometer': metering_secret => 's3cr3t' }"
|
||||
end
|
||||
|
||||
let :params do
|
||||
{ :ack_on_event_error => true,
|
||||
:store_events => false }
|
||||
end
|
||||
|
||||
shared_examples_for 'ceilometer-agent-notification' do
|
||||
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs ceilometer agent notification package' do
|
||||
should contain_package(platform_params[:agent_notification_package_name])
|
||||
end
|
||||
|
||||
it 'configures ceilometer agent notification service' do
|
||||
should contain_service('ceilometer-agent-notification').with(
|
||||
:ensure => 'running',
|
||||
:name => platform_params[:agent_notification_service_name],
|
||||
:enable => true,
|
||||
:hasstatus => true,
|
||||
:hasrestart => true
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures notifications parameters in ceilometer.conf' do
|
||||
should contain_ceilometer_config('notification/ack_on_event_error').with_value( params[:ack_on_event_error] )
|
||||
should contain_ceilometer_config('notification/store_events').with_value( params[:store_events] )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context 'on Debian platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'Debian' }
|
||||
end
|
||||
|
||||
let :platform_params do
|
||||
{ :agent_notification_package_name => 'ceilometer-agent-notification',
|
||||
:agent_notification_service_name => 'ceilometer-agent-notification' }
|
||||
end
|
||||
|
||||
it_configures 'ceilometer-agent-notification'
|
||||
end
|
||||
|
||||
context 'on RedHat platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'RedHat' }
|
||||
end
|
||||
|
||||
let :platform_params do
|
||||
{ :agent_notification_package_name => 'openstack-ceilometer-collector',
|
||||
:agent_notification_service_name => 'openstack-ceilometer-agent-notification' }
|
||||
end
|
||||
|
||||
it_configures 'ceilometer-agent-notification'
|
||||
end
|
||||
|
||||
end
|
@ -0,0 +1,102 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'ceilometer::alarm::evaluator' do
|
||||
|
||||
let :pre_condition do
|
||||
"class { 'ceilometer': metering_secret => 's3cr3t' }"
|
||||
end
|
||||
|
||||
let :params do
|
||||
{ :evaluation_interval => 60,
|
||||
:evaluation_service => 'ceilometer.alarm.service.SingletonAlarmService',
|
||||
:partition_rpc_topic => 'alarm_partition_coordination',
|
||||
:record_history => true,
|
||||
:enabled => true,
|
||||
}
|
||||
end
|
||||
|
||||
shared_examples_for 'ceilometer-alarm-evaluator' do
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs ceilometer-alarm package' do
|
||||
should contain_package(platform_params[:alarm_evaluator_package_name]).with_before('Service[ceilometer-alarm-evaluator]')
|
||||
should contain_package(platform_params[:alarm_evaluator_package_name]).with(
|
||||
:ensure => 'present',
|
||||
:name => platform_params[:alarm_evaluator_package_name]
|
||||
)
|
||||
end
|
||||
|
||||
it 'ensures ceilometer-common is installed before the service' do
|
||||
should contain_package('ceilometer-common').with(
|
||||
:before => /Service\[ceilometer-alarm-evaluator\]/
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures ceilometer-alarm-evaluator service' do
|
||||
should contain_service('ceilometer-alarm-evaluator').with(
|
||||
:ensure => 'running',
|
||||
:name => platform_params[:alarm_evaluator_service_name],
|
||||
:enable => true,
|
||||
:hasstatus => true,
|
||||
:hasrestart => true
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
it 'configures alarm evaluator' do
|
||||
should contain_ceilometer_config('alarm/evaluation_interval').with_value( params[:evaluation_interval] )
|
||||
should contain_ceilometer_config('alarm/evaluation_service').with_value( params[:evaluation_service] )
|
||||
should contain_ceilometer_config('alarm/partition_rpc_topic').with_value( params[:partition_rpc_topic] )
|
||||
should contain_ceilometer_config('alarm/record_history').with_value( params[:record_history] )
|
||||
end
|
||||
|
||||
context 'when overriding parameters' do
|
||||
before do
|
||||
params.merge!(:evaluation_interval => 80,
|
||||
:partition_rpc_topic => 'alarm_partition_coordination',
|
||||
:record_history => false,
|
||||
:evaluation_service => 'ceilometer.alarm.service.SingletonTestAlarmService')
|
||||
end
|
||||
it { should contain_ceilometer_config('alarm/evaluation_interval').with_value(params[:evaluation_interval]) }
|
||||
it { should contain_ceilometer_config('alarm/evaluation_service').with_value(params[:evaluation_service]) }
|
||||
it { should contain_ceilometer_config('alarm/record_history').with_value(params[:record_history]) }
|
||||
it { should contain_ceilometer_config('alarm/partition_rpc_topic').with_value(params[:partition_rpc_topic]) }
|
||||
end
|
||||
|
||||
context 'when override the evaluation interval with a non numeric value' do
|
||||
before do
|
||||
params.merge!(:evaluation_interval => 'NaN')
|
||||
end
|
||||
|
||||
it { expect { should contain_ceilometer_config('alarm/evaluation_interval') }.to\
|
||||
raise_error(Puppet::Error, /validate_re\(\): .* does not match/) }
|
||||
end
|
||||
end
|
||||
|
||||
context 'on Debian platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'Debian' }
|
||||
end
|
||||
|
||||
let :platform_params do
|
||||
{ :alarm_evaluator_package_name => 'ceilometer-alarm-evaluator',
|
||||
:alarm_evaluator_service_name => 'ceilometer-alarm-evaluator' }
|
||||
end
|
||||
|
||||
it_configures 'ceilometer-alarm-evaluator'
|
||||
end
|
||||
|
||||
context 'on RedHat platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'RedHat' }
|
||||
end
|
||||
|
||||
let :platform_params do
|
||||
{ :alarm_evaluator_package_name => 'openstack-ceilometer-alarm',
|
||||
:alarm_evaluator_service_name => 'openstack-ceilometer-alarm-evaluator' }
|
||||
end
|
||||
|
||||
it_configures 'ceilometer-alarm-evaluator'
|
||||
end
|
||||
|
||||
end
|
@ -0,0 +1,95 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'ceilometer::alarm::notifier' do
|
||||
|
||||
let :pre_condition do
|
||||
"class { 'ceilometer': metering_secret => 's3cr3t' }"
|
||||
end
|
||||
|
||||
let :params do
|
||||
{
|
||||
#:notifier_rpc_topic => 'UNSET',
|
||||
#:rest_notifier_certificate_key => 'UNSET',
|
||||
#:rest_notifier_certificate_file => 'UNSET',
|
||||
#:rest_notifier_ssl_verify => true,
|
||||
:enabled => true,
|
||||
}
|
||||
end
|
||||
|
||||
shared_examples_for 'ceilometer-alarm-notifier' do
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs ceilometer-alarm package' do
|
||||
should contain_package(platform_params[:alarm_notifier_package_name]).with_before('Service[ceilometer-alarm-notifier]')
|
||||
should contain_package(platform_params[:alarm_notifier_package_name]).with(
|
||||
:ensure => 'present',
|
||||
:name => platform_params[:alarm_notifier_package_name]
|
||||
)
|
||||
end
|
||||
|
||||
it 'ensures ceilometer-common is installed before the service' do
|
||||
should contain_package('ceilometer-common').with(
|
||||
:before => /Service\[ceilometer-alarm-notifier\]/
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures ceilometer-alarm-notifier service' do
|
||||
should contain_service('ceilometer-alarm-notifier').with(
|
||||
:ensure => 'running',
|
||||
:name => platform_params[:alarm_notifier_service_name],
|
||||
:enable => true,
|
||||
:hasstatus => true,
|
||||
:hasrestart => true
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
it 'configures alarm notifier' do
|
||||
should_not contain_ceilometer_config('alarm/notifier_rpc_topic')
|
||||
should_not contain_ceilometer_config('alarm/rest_notifier_certificate_key')
|
||||
should_not contain_ceilometer_config('alarm/rest_notifier_certificate_file')
|
||||
should_not contain_ceilometer_config('alarm/rest_notifier_ssl_verify')
|
||||
end
|
||||
|
||||
context 'when overriding parameters' do
|
||||
before do
|
||||
params.merge!(:notifier_rpc_topic => 'alarm_notifier',
|
||||
:rest_notifier_certificate_key => '0xdeadbeef',
|
||||
:rest_notifier_certificate_file => '/var/file',
|
||||
:rest_notifier_ssl_verify => true)
|
||||
end
|
||||
it { should contain_ceilometer_config('alarm/notifier_rpc_topic').with_value(params[:notifier_rpc_topic]) }
|
||||
it { should contain_ceilometer_config('alarm/rest_notifier_certificate_key').with_value(params[:rest_notifier_certificate_key]) }
|
||||
it { should contain_ceilometer_config('alarm/rest_notifier_certificate_file').with_value(params[:rest_notifier_certificate_file]) }
|
||||
it { should contain_ceilometer_config('alarm/rest_notifier_ssl_verify').with_value(params[:rest_notifier_ssl_verify]) }
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context 'on Debian platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'Debian' }
|
||||
end
|
||||
|
||||
let :platform_params do
|
||||
{ :alarm_notifier_package_name => 'ceilometer-alarm-notifier',
|
||||
:alarm_notifier_service_name => 'ceilometer-alarm-notifier' }
|
||||
end
|
||||
|
||||
it_configures 'ceilometer-alarm-notifier'
|
||||
end
|
||||
|
||||
context 'on RedHat platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'RedHat' }
|
||||
end
|
||||
|
||||
let :platform_params do
|
||||
{ :alarm_notifier_package_name => 'openstack-ceilometer-alarm',
|
||||
:alarm_notifier_service_name => 'openstack-ceilometer-alarm-notifier' }
|
||||
end
|
||||
|
||||
it_configures 'ceilometer-alarm-notifier'
|
||||
end
|
||||
|
||||
end
|
@ -13,7 +13,9 @@ describe 'ceilometer::api' do
|
||||
:keystone_protocol => 'http',
|
||||
:keystone_user => 'ceilometer',
|
||||
:keystone_password => 'ceilometer-passw0rd',
|
||||
:keystone_tenant => 'services'
|
||||
:keystone_tenant => 'services',
|
||||
:host => '0.0.0.0',
|
||||
:port => '8777'
|
||||
}
|
||||
end
|
||||
|
||||
@ -24,7 +26,7 @@ describe 'ceilometer::api' do
|
||||
it { expect { should raise_error(Puppet::Error) } }
|
||||
end
|
||||
|
||||
it { should include_class('ceilometer::params') }
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs ceilometer-api package' do
|
||||
should contain_package('ceilometer-api').with(
|
||||
@ -53,6 +55,9 @@ describe 'ceilometer::api' do
|
||||
should contain_ceilometer_config('keystone_authtoken/admin_user').with_value( params[:keystone_user] )
|
||||
should contain_ceilometer_config('keystone_authtoken/admin_password').with_value( params[:keystone_password] )
|
||||
should contain_ceilometer_config('keystone_authtoken/auth_admin_prefix').with_ensure('absent')
|
||||
should contain_ceilometer_config('keystone_authtoken/auth_uri').with_value( params[:keystone_protocol] + "://" + params[:keystone_host] + ":5000/" )
|
||||
should contain_ceilometer_config('api/host').with_value( params[:host] )
|
||||
should contain_ceilometer_config('api/port').with_value( params[:port] )
|
||||
end
|
||||
|
||||
context 'when specifying keystone_auth_admin_prefix' do
|
||||
@ -104,4 +109,19 @@ describe 'ceilometer::api' do
|
||||
|
||||
it_configures 'ceilometer-api'
|
||||
end
|
||||
|
||||
describe 'with custom auth_uri' do
|
||||
let :facts do
|
||||
{ :osfamily => 'RedHat' }
|
||||
end
|
||||
before do
|
||||
params.merge!({
|
||||
:keystone_auth_uri => 'https://foo.bar:1234/',
|
||||
})
|
||||
end
|
||||
it 'should configure custom auth_uri correctly' do
|
||||
should contain_ceilometer_config('keystone_authtoken/auth_uri').with_value( 'https://foo.bar:1234/' )
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -4,7 +4,7 @@ describe 'ceilometer::client' do
|
||||
|
||||
shared_examples_for 'ceilometer client' do
|
||||
|
||||
it { should include_class('ceilometer::params') }
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs ceilometer client package' do
|
||||
should contain_package('python-ceilometerclient').with(
|
||||
|
@ -8,13 +8,10 @@ describe 'ceilometer::collector' do
|
||||
|
||||
shared_examples_for 'ceilometer-collector' do
|
||||
|
||||
it { should include_class('ceilometer::params') }
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs ceilometer-collector package' do
|
||||
should contain_package('ceilometer-collector').with(
|
||||
:ensure => 'installed',
|
||||
:name => platform_params[:collector_package_name]
|
||||
)
|
||||
should contain_package(platform_params[:collector_package_name])
|
||||
end
|
||||
|
||||
it 'configures ceilometer-collector service' do
|
||||
|
@ -0,0 +1,29 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'ceilometer::config' do
|
||||
|
||||
let :params do
|
||||
{ :ceilometer_config => {
|
||||
'api/host' => { 'value' => '0.0.0.0'},
|
||||
'api/port' => { 'value' => '8777'},
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
it 'with [api] options ceilometer_config ' do
|
||||
should contain_ceilometer_config('api/host').with_value('0.0.0.0')
|
||||
should contain_ceilometer_config('api/port').with_value('8777')
|
||||
end
|
||||
|
||||
describe 'with [rpc_notifier2] options ceilometer_config' do
|
||||
before do
|
||||
params.merge!({
|
||||
:ceilometer_config => { 'rpc_notifier2/topics' => { 'value' => 'notifications'},},
|
||||
})
|
||||
end
|
||||
it 'should configure rpc_notifier2 topics correctly' do
|
||||
should contain_ceilometer_config('rpc_notifier2/topics').with_value('notifications')
|
||||
end
|
||||
|
||||
end
|
||||
end
|
@ -7,11 +7,13 @@ describe 'ceilometer::db::mysql' do
|
||||
end
|
||||
|
||||
let :params do
|
||||
{ :password => 's3cr3t',
|
||||
:dbname => 'ceilometer',
|
||||
:user => 'ceilometer',
|
||||
:host => 'localhost',
|
||||
:charset => 'latin1'
|
||||
{ :password => 's3cr3t',
|
||||
:dbname => 'ceilometer',
|
||||
:user => 'ceilometer',
|
||||
:host => 'localhost',
|
||||
:charset => 'latin1',
|
||||
:collate => 'latin1_swedish_ci',
|
||||
:mysql_module => '0.9',
|
||||
}
|
||||
end
|
||||
|
||||
@ -48,4 +50,63 @@ describe 'ceilometer::db::mysql' do
|
||||
|
||||
it_configures 'ceilometer mysql database'
|
||||
end
|
||||
|
||||
describe "overriding allowed_hosts param to array" do
|
||||
let :facts do
|
||||
{ :osfamily => "Debian" }
|
||||
end
|
||||
let :params do
|
||||
{
|
||||
:password => 'ceilometerpass',
|
||||
:allowed_hosts => ['localhost','%']
|
||||
}
|
||||
end
|
||||
|
||||
it {should_not contain_ceilometer__db__mysql__host_access("localhost").with(
|
||||
:user => 'ceilometer',
|
||||
:password => 'ceilometerpass',
|
||||
:database => 'ceilometer'
|
||||
)}
|
||||
it {should contain_ceilometer__db__mysql__host_access("%").with(
|
||||
:user => 'ceilometer',
|
||||
:password => 'ceilometerpass',
|
||||
:database => 'ceilometer'
|
||||
)}
|
||||
end
|
||||
|
||||
describe "overriding allowed_hosts param to string" do
|
||||
let :facts do
|
||||
{ :osfamily => 'RedHat' }
|
||||
end
|
||||
let :params do
|
||||
{
|
||||
:password => 'ceilometerpass2',
|
||||
:allowed_hosts => '192.168.1.1'
|
||||
}
|
||||
end
|
||||
|
||||
it {should contain_ceilometer__db__mysql__host_access("192.168.1.1").with(
|
||||
:user => 'ceilometer',
|
||||
:password => 'ceilometerpass2',
|
||||
:database => 'ceilometer'
|
||||
)}
|
||||
end
|
||||
|
||||
describe "overriding allowed_hosts param equals to host param " do
|
||||
let :facts do
|
||||
{ :osfamily => 'RedHat' }
|
||||
end
|
||||
let :params do
|
||||
{
|
||||
:password => 'ceilometerpass2',
|
||||
:allowed_hosts => 'localhost'
|
||||
}
|
||||
end
|
||||
|
||||
it {should_not contain_ceilometer__db__mysql__host_access("localhost").with(
|
||||
:user => 'ceilometer',
|
||||
:password => 'ceilometerpass2',
|
||||
:database => 'ceilometer'
|
||||
)}
|
||||
end
|
||||
end
|
||||
|
168
deployment/puppet/ceilometer/spec/classes/ceilometer_db_spec.rb
Normal file
168
deployment/puppet/ceilometer/spec/classes/ceilometer_db_spec.rb
Normal file
@ -0,0 +1,168 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'ceilometer::db' do
|
||||
|
||||
# debian has "python-pymongo"
|
||||
context 'on Debian platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'Debian' }
|
||||
end
|
||||
|
||||
let :params do
|
||||
{ :database_connection => 'mongodb://localhost:1234/ceilometer',
|
||||
:sync_db => true }
|
||||
end
|
||||
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs python-mongodb package' do
|
||||
should contain_package('ceilometer-backend-package').with(
|
||||
:ensure => 'present',
|
||||
:name => 'python-pymongo')
|
||||
should contain_ceilometer_config('database/connection').with_value('mongodb://localhost:1234/ceilometer')
|
||||
end
|
||||
|
||||
it 'runs ceilometer-dbsync' do
|
||||
should contain_exec('ceilometer-dbsync').with(
|
||||
:command => 'ceilometer-dbsync --config-file=/etc/ceilometer/ceilometer.conf',
|
||||
:path => '/usr/bin',
|
||||
:refreshonly => 'true',
|
||||
:user => 'ceilometer',
|
||||
:logoutput => 'on_failure'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
# Fedora > 18 has python-pymongo too
|
||||
context 'on Redhat platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'Redhat',
|
||||
:operatingsystem => 'Fedora',
|
||||
:operatingsystemrelease => 18
|
||||
}
|
||||
end
|
||||
|
||||
let :params do
|
||||
{ :database_connection => 'mongodb://localhost:1234/ceilometer',
|
||||
:sync_db => false }
|
||||
end
|
||||
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs pymongo package' do
|
||||
should contain_package('ceilometer-backend-package').with(
|
||||
:ensure => 'present',
|
||||
:name => 'python-pymongo')
|
||||
should contain_ceilometer_config('database/connection').with_value('mongodb://localhost:1234/ceilometer')
|
||||
end
|
||||
|
||||
it 'runs ceilometer-dbsync' do
|
||||
should contain_exec('ceilometer-dbsync').with(
|
||||
:command => '/bin/true',
|
||||
:path => '/usr/bin',
|
||||
:refreshonly => 'true',
|
||||
:user => 'ceilometer',
|
||||
:logoutput => 'on_failure'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
# RHEL has python-pymongo too
|
||||
context 'on Redhat platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'Redhat',
|
||||
:operatingsystem => 'CentOS',
|
||||
:operatingsystemrelease => 6.4
|
||||
}
|
||||
end
|
||||
|
||||
let :params do
|
||||
{ :database_connection => 'mongodb://localhost:1234/ceilometer',
|
||||
:sync_db => true }
|
||||
end
|
||||
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs pymongo package' do
|
||||
should contain_package('ceilometer-backend-package').with(
|
||||
:ensure => 'present',
|
||||
:name => 'python-pymongo')
|
||||
end
|
||||
|
||||
it 'runs ceilometer-dbsync' do
|
||||
should contain_exec('ceilometer-dbsync').with(
|
||||
:command => 'ceilometer-dbsync --config-file=/etc/ceilometer/ceilometer.conf',
|
||||
:path => '/usr/bin',
|
||||
:refreshonly => 'true',
|
||||
:user => 'ceilometer',
|
||||
:logoutput => 'on_failure'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
# RHEL has python-sqlite2
|
||||
context 'on Redhat platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'Redhat',
|
||||
:operatingsystem => 'CentOS',
|
||||
:operatingsystemrelease => 6.4
|
||||
}
|
||||
end
|
||||
|
||||
let :params do
|
||||
{ :database_connection => 'sqlite:///var/lib/ceilometer.db',
|
||||
:sync_db => false }
|
||||
end
|
||||
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs pymongo package' do
|
||||
should contain_package('ceilometer-backend-package').with(
|
||||
:ensure => 'present',
|
||||
:name => 'python-sqlite2')
|
||||
should contain_ceilometer_config('database/connection').with_value('sqlite:///var/lib/ceilometer.db')
|
||||
end
|
||||
|
||||
it 'runs ceilometer-dbsync' do
|
||||
should contain_exec('ceilometer-dbsync').with(
|
||||
:command => '/bin/true',
|
||||
:path => '/usr/bin',
|
||||
:refreshonly => 'true',
|
||||
:user => 'ceilometer',
|
||||
:logoutput => 'on_failure'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
# debian has "python-pysqlite2"
|
||||
context 'on Debian platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'Debian' }
|
||||
end
|
||||
|
||||
let :params do
|
||||
{ :database_connection => 'sqlite:///var/lib/ceilometer.db',
|
||||
:sync_db => true }
|
||||
end
|
||||
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs python-mongodb package' do
|
||||
should contain_package('ceilometer-backend-package').with(
|
||||
:ensure => 'present',
|
||||
:name => 'python-pysqlite2')
|
||||
end
|
||||
|
||||
it 'runs ceilometer-dbsync' do
|
||||
should contain_exec('ceilometer-dbsync').with(
|
||||
:command => 'ceilometer-dbsync --config-file=/etc/ceilometer/ceilometer.conf',
|
||||
:path => '/usr/bin',
|
||||
:refreshonly => 'true',
|
||||
:user => 'ceilometer',
|
||||
:logoutput => 'on_failure'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -0,0 +1,87 @@
|
||||
#
|
||||
# Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
|
||||
#
|
||||
# Author: Emilien Macchi <emilien.macchi@enovance.com>
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# Unit tests for ceilometer::expirer
|
||||
#
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'ceilometer::expirer' do
|
||||
|
||||
let :pre_condition do
|
||||
"class { 'ceilometer': metering_secret => 's3cr3t' }"
|
||||
end
|
||||
|
||||
let :params do
|
||||
{ :time_to_live => '-1' }
|
||||
end
|
||||
|
||||
shared_examples_for 'ceilometer-expirer' do
|
||||
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'installs ceilometer common package' do
|
||||
should contain_package('ceilometer-common').with(
|
||||
:ensure => 'present',
|
||||
:name => platform_params[:common_package_name]
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures a cron' do
|
||||
should contain_cron('ceilometer-expirer').with(
|
||||
:command => 'ceilometer-expirer',
|
||||
:environment => 'PATH=/bin:/usr/bin:/usr/sbin',
|
||||
:user => 'ceilometer',
|
||||
:minute => 1,
|
||||
:hour => 0,
|
||||
:monthday => '*',
|
||||
:month => '*',
|
||||
:weekday => '*'
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures database section in ceilometer.conf' do
|
||||
should contain_ceilometer_config('database/time_to_live').with_value( params[:time_to_live] )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context 'on Debian platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'Debian' }
|
||||
end
|
||||
|
||||
let :platform_params do
|
||||
{ :common_package_name => 'ceilometer-common' }
|
||||
end
|
||||
|
||||
it_configures 'ceilometer-expirer'
|
||||
end
|
||||
|
||||
context 'on RedHat platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'RedHat' }
|
||||
end
|
||||
|
||||
let :platform_params do
|
||||
{ :common_package_name => 'openstack-ceilometer-common' }
|
||||
end
|
||||
|
||||
it_configures 'ceilometer-expirer'
|
||||
end
|
||||
|
||||
end
|
@ -6,41 +6,68 @@ describe 'ceilometer' do
|
||||
{
|
||||
:metering_secret => 'metering-s3cr3t',
|
||||
:package_ensure => 'present',
|
||||
:verbose => false,
|
||||
:debug => false,
|
||||
:debug => 'False',
|
||||
:log_dir => '/var/log/ceilometer',
|
||||
:verbose => 'False',
|
||||
}
|
||||
end
|
||||
|
||||
let :rabbit_params do
|
||||
{
|
||||
:rabbit_host => '127.0.0.1',
|
||||
:rabbit_port => 5672,
|
||||
:rabbit_userid => 'guest',
|
||||
:rabbit_password => '',
|
||||
:rabbit_virtualhost => '/',
|
||||
:rabbit_virtual_host => '/',
|
||||
}
|
||||
end
|
||||
|
||||
let :qpid_params do
|
||||
{
|
||||
:rpc_backend => "ceilometer.openstack.common.rpc.impl_qpid",
|
||||
:qpid_hostname => 'localhost',
|
||||
:qpid_port => 5672,
|
||||
:qpid_username => 'guest',
|
||||
:qpid_password => 'guest',
|
||||
}
|
||||
end
|
||||
|
||||
shared_examples_for 'ceilometer' do
|
||||
|
||||
context 'with rabbit_host parameter' do
|
||||
before { params.merge!( rabbit_params ) }
|
||||
it_configures 'a ceilometer base installation'
|
||||
it_configures 'rabbit with SSL support'
|
||||
it_configures 'rabbit without HA support (with backward compatibility)'
|
||||
end
|
||||
|
||||
context 'with rabbit_hosts parameter' do
|
||||
context 'with one server' do
|
||||
before { params.merge!( :rabbit_hosts => ['127.0.0.1:5672'] ) }
|
||||
before { params.merge!( rabbit_params ).merge!( :rabbit_hosts => ['127.0.0.1:5672'] ) }
|
||||
it_configures 'a ceilometer base installation'
|
||||
it_configures 'rabbit with SSL support'
|
||||
it_configures 'rabbit without HA support (without backward compatibility)'
|
||||
end
|
||||
|
||||
context 'with multiple servers' do
|
||||
before { params.merge!( :rabbit_hosts => ['rabbit1:5672', 'rabbit2:5672'] ) }
|
||||
before { params.merge!( rabbit_params ).merge!( :rabbit_hosts => ['rabbit1:5672', 'rabbit2:5672'] ) }
|
||||
it_configures 'a ceilometer base installation'
|
||||
it_configures 'rabbit with SSL support'
|
||||
it_configures 'rabbit with HA support'
|
||||
end
|
||||
end
|
||||
|
||||
context 'with qpid' do
|
||||
before {params.merge!( qpid_params ) }
|
||||
it_configures 'a ceilometer base installation'
|
||||
it_configures 'qpid support'
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
shared_examples_for 'a ceilometer base installation' do
|
||||
|
||||
it { should include_class('ceilometer::params') }
|
||||
it { should contain_class('ceilometer::params') }
|
||||
|
||||
it 'configures ceilometer group' do
|
||||
should contain_group('ceilometer').with(
|
||||
@ -53,7 +80,6 @@ describe 'ceilometer' do
|
||||
should contain_user('ceilometer').with(
|
||||
:name => 'ceilometer',
|
||||
:gid => 'ceilometer',
|
||||
:groups => ['nova'],
|
||||
:system => true,
|
||||
:require => 'Package[ceilometer-common]'
|
||||
)
|
||||
@ -86,7 +112,7 @@ describe 'ceilometer' do
|
||||
end
|
||||
|
||||
it 'configures required metering_secret' do
|
||||
should contain_ceilometer_config('DEFAULT/metering_secret').with_value('metering-s3cr3t')
|
||||
should contain_ceilometer_config('publisher/metering_secret').with_value('metering-s3cr3t')
|
||||
end
|
||||
|
||||
context 'without the required metering_secret' do
|
||||
@ -94,27 +120,63 @@ describe 'ceilometer' do
|
||||
it { expect { should raise_error(Puppet::Error) } }
|
||||
end
|
||||
|
||||
it 'configures rabbit' do
|
||||
should contain_ceilometer_config('DEFAULT/rabbit_userid').with_value( params[:rabbit_userid] )
|
||||
should contain_ceilometer_config('DEFAULT/rabbit_password').with_value( params[:rabbit_password] )
|
||||
should contain_ceilometer_config('DEFAULT/rabbit_virtualhost').with_value( params[:rabbit_virtualhost] )
|
||||
end
|
||||
|
||||
it 'configures debug and verbose' do
|
||||
it 'configures debug and verbosity' do
|
||||
should contain_ceilometer_config('DEFAULT/debug').with_value( params[:debug] )
|
||||
should contain_ceilometer_config('DEFAULT/verbose').with_value( params[:verbose] )
|
||||
end
|
||||
|
||||
it 'fixes a bad value in ceilometer (glance_control_exchange)' do
|
||||
should contain_ceilometer_config('DEFAULT/glance_control_exchange').with_value('glance')
|
||||
it 'configures logging directory by default' do
|
||||
should contain_ceilometer_config('DEFAULT/log_dir').with_value( params[:log_dir] )
|
||||
end
|
||||
|
||||
it 'adds glance-notifications topic' do
|
||||
should contain_ceilometer_config('DEFAULT/notification_topics').with_value('notifications,glance_notifications')
|
||||
context 'with logging directory disabled' do
|
||||
before { params.merge!( :log_dir => false) }
|
||||
|
||||
it { should contain_ceilometer_config('DEFAULT/log_dir').with_ensure('absent') }
|
||||
end
|
||||
|
||||
it 'configures notification_topics' do
|
||||
should contain_ceilometer_config('DEFAULT/notification_topics').with_value('notifications')
|
||||
end
|
||||
|
||||
it 'configures syslog to be disabled by default' do
|
||||
should contain_ceilometer_config('DEFAULT/use_syslog').with_value('false')
|
||||
end
|
||||
|
||||
context 'with syslog enabled' do
|
||||
before { params.merge!( :use_syslog => 'true' ) }
|
||||
|
||||
it { should contain_ceilometer_config('DEFAULT/use_syslog').with_value('true') }
|
||||
it { should contain_ceilometer_config('DEFAULT/syslog_log_facility').with_value('LOG_USER') }
|
||||
end
|
||||
|
||||
context 'with syslog enabled and custom settings' do
|
||||
before { params.merge!(
|
||||
:use_syslog => 'true',
|
||||
:log_facility => 'LOG_LOCAL0'
|
||||
) }
|
||||
|
||||
it { should contain_ceilometer_config('DEFAULT/use_syslog').with_value('true') }
|
||||
it { should contain_ceilometer_config('DEFAULT/syslog_log_facility').with_value('LOG_LOCAL0') }
|
||||
end
|
||||
|
||||
context 'with overriden notification_topics parameter' do
|
||||
before { params.merge!( :notification_topics => ['notifications', 'custom']) }
|
||||
|
||||
it 'configures notification_topics' do
|
||||
should contain_ceilometer_config('DEFAULT/notification_topics').with_value('notifications,custom')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
shared_examples_for 'rabbit without HA support (with backward compatibility)' do
|
||||
|
||||
it 'configures rabbit' do
|
||||
should contain_ceilometer_config('DEFAULT/rabbit_userid').with_value( params[:rabbit_userid] )
|
||||
should contain_ceilometer_config('DEFAULT/rabbit_password').with_value( params[:rabbit_password] )
|
||||
should contain_ceilometer_config('DEFAULT/rabbit_virtual_host').with_value( params[:rabbit_virtual_host] )
|
||||
end
|
||||
|
||||
it { should contain_ceilometer_config('DEFAULT/rabbit_host').with_value( params[:rabbit_host] ) }
|
||||
it { should contain_ceilometer_config('DEFAULT/rabbit_port').with_value( params[:rabbit_port] ) }
|
||||
it { should contain_ceilometer_config('DEFAULT/rabbit_hosts').with_value( "#{params[:rabbit_host]}:#{params[:rabbit_port]}" ) }
|
||||
@ -122,6 +184,13 @@ describe 'ceilometer' do
|
||||
end
|
||||
|
||||
shared_examples_for 'rabbit without HA support (without backward compatibility)' do
|
||||
|
||||
it 'configures rabbit' do
|
||||
should contain_ceilometer_config('DEFAULT/rabbit_userid').with_value( params[:rabbit_userid] )
|
||||
should contain_ceilometer_config('DEFAULT/rabbit_password').with_value( params[:rabbit_password] )
|
||||
should contain_ceilometer_config('DEFAULT/rabbit_virtual_host').with_value( params[:rabbit_virtual_host] )
|
||||
end
|
||||
|
||||
it { should contain_ceilometer_config('DEFAULT/rabbit_host').with_ensure('absent') }
|
||||
it { should contain_ceilometer_config('DEFAULT/rabbit_port').with_ensure('absent') }
|
||||
it { should contain_ceilometer_config('DEFAULT/rabbit_hosts').with_value( params[:rabbit_hosts].join(',') ) }
|
||||
@ -129,12 +198,85 @@ describe 'ceilometer' do
|
||||
end
|
||||
|
||||
shared_examples_for 'rabbit with HA support' do
|
||||
|
||||
it 'configures rabbit' do
|
||||
should contain_ceilometer_config('DEFAULT/rabbit_userid').with_value( params[:rabbit_userid] )
|
||||
should contain_ceilometer_config('DEFAULT/rabbit_password').with_value( params[:rabbit_password] )
|
||||
should contain_ceilometer_config('DEFAULT/rabbit_virtual_host').with_value( params[:rabbit_virtual_host] )
|
||||
end
|
||||
|
||||
it { should contain_ceilometer_config('DEFAULT/rabbit_host').with_ensure('absent') }
|
||||
it { should contain_ceilometer_config('DEFAULT/rabbit_port').with_ensure('absent') }
|
||||
it { should contain_ceilometer_config('DEFAULT/rabbit_hosts').with_value( params[:rabbit_hosts].join(',') ) }
|
||||
it { should contain_ceilometer_config('DEFAULT/rabbit_ha_queues').with_value('true') }
|
||||
end
|
||||
|
||||
shared_examples_for 'rabbit with SSL support' do
|
||||
context "with default parameters" do
|
||||
it { should contain_ceilometer_config('DEFAULT/rabbit_use_ssl').with_value('false') }
|
||||
it { should contain_ceilometer_config('DEFAULT/kombu_ssl_ca_certs').with_ensure('absent') }
|
||||
it { should contain_ceilometer_config('DEFAULT/kombu_ssl_certfile').with_ensure('absent') }
|
||||
it { should contain_ceilometer_config('DEFAULT/kombu_ssl_keyfile').with_ensure('absent') }
|
||||
it { should contain_ceilometer_config('DEFAULT/kombu_ssl_version').with_ensure('absent') }
|
||||
end
|
||||
|
||||
context "with SSL enabled" do
|
||||
before { params.merge!( :rabbit_use_ssl => 'true' ) }
|
||||
it { should contain_ceilometer_config('DEFAULT/rabbit_use_ssl').with_value('true') }
|
||||
it { should contain_ceilometer_config('DEFAULT/kombu_ssl_ca_certs').with_ensure('absent') }
|
||||
it { should contain_ceilometer_config('DEFAULT/kombu_ssl_certfile').with_ensure('absent') }
|
||||
it { should contain_ceilometer_config('DEFAULT/kombu_ssl_keyfile').with_ensure('absent') }
|
||||
it { should contain_ceilometer_config('DEFAULT/kombu_ssl_version').with_value('SSLv3') }
|
||||
|
||||
context "with ca_certs" do
|
||||
before { params.merge!( :kombu_ssl_ca_certs => '/path/to/ca.crt' ) }
|
||||
it { should contain_ceilometer_config('DEFAULT/kombu_ssl_ca_certs').with_value('/path/to/ca.crt') }
|
||||
end
|
||||
|
||||
context "with certfile" do
|
||||
before { params.merge!( :kombu_ssl_certfile => '/path/to/cert.crt' ) }
|
||||
it { should contain_ceilometer_config('DEFAULT/kombu_ssl_certfile').with_value('/path/to/cert.crt') }
|
||||
end
|
||||
|
||||
context "with keyfile" do
|
||||
before { params.merge!( :kombu_ssl_keyfile => '/path/to/cert.key' ) }
|
||||
it { should contain_ceilometer_config('DEFAULT/kombu_ssl_keyfile').with_value('/path/to/cert.key') }
|
||||
end
|
||||
|
||||
context "with version" do
|
||||
before { params.merge!( :kombu_ssl_version => 'TLSv1' ) }
|
||||
it { should contain_ceilometer_config('DEFAULT/kombu_ssl_version').with_value('TLSv1') }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
shared_examples_for 'qpid support' do
|
||||
context("with default parameters") do
|
||||
it { should contain_ceilometer_config('DEFAULT/qpid_reconnect').with_value(true) }
|
||||
it { should contain_ceilometer_config('DEFAULT/qpid_reconnect_timeout').with_value('0') }
|
||||
it { should contain_ceilometer_config('DEFAULT/qpid_reconnect_limit').with_value('0') }
|
||||
it { should contain_ceilometer_config('DEFAULT/qpid_reconnect_interval_min').with_value('0') }
|
||||
it { should contain_ceilometer_config('DEFAULT/qpid_reconnect_interval_max').with_value('0') }
|
||||
it { should contain_ceilometer_config('DEFAULT/qpid_reconnect_interval').with_value('0') }
|
||||
it { should contain_ceilometer_config('DEFAULT/qpid_heartbeat').with_value('60') }
|
||||
it { should contain_ceilometer_config('DEFAULT/qpid_protocol').with_value('tcp') }
|
||||
it { should contain_ceilometer_config('DEFAULT/qpid_tcp_nodelay').with_value(true) }
|
||||
end
|
||||
|
||||
context("with mandatory parameters set") do
|
||||
it { should contain_ceilometer_config('DEFAULT/rpc_backend').with_value('ceilometer.openstack.common.rpc.impl_qpid') }
|
||||
it { should contain_ceilometer_config('DEFAULT/qpid_hostname').with_value( params[:qpid_hostname] ) }
|
||||
it { should contain_ceilometer_config('DEFAULT/qpid_port').with_value( params[:qpid_port] ) }
|
||||
it { should contain_ceilometer_config('DEFAULT/qpid_username').with_value( params[:qpid_username]) }
|
||||
it { should contain_ceilometer_config('DEFAULT/qpid_password').with_value(params[:qpid_password]) }
|
||||
end
|
||||
|
||||
context("failing if the rpc_backend is not present") do
|
||||
before { params.delete( :rpc_backend) }
|
||||
it { expect { should raise_error(Puppet::Error) } }
|
||||
end
|
||||
end
|
||||
|
||||
context 'on Debian platforms' do
|
||||
let :facts do
|
||||
{ :osfamily => 'Debian' }
|
||||
|
@ -2,9 +2,8 @@ require 'spec_helper'
|
||||
|
||||
describe 'ceilometer::keystone::auth' do
|
||||
|
||||
let :params do
|
||||
let :default_params do
|
||||
{
|
||||
:password => 'ceilometer-passw0rd',
|
||||
:email => 'ceilometer@localhost',
|
||||
:auth_name => 'ceilometer',
|
||||
:configure_endpoint => true,
|
||||
@ -15,49 +14,137 @@ describe 'ceilometer::keystone::auth' do
|
||||
:port => '8777',
|
||||
:region => 'RegionOne',
|
||||
:tenant => 'services',
|
||||
:public_protocol => 'http'
|
||||
:public_protocol => 'http',
|
||||
:admin_protocol => 'http',
|
||||
:internal_protocol => 'http'
|
||||
}
|
||||
end
|
||||
|
||||
shared_examples_for 'ceilometer keystone auth' do
|
||||
|
||||
context 'without the required password parameter' do
|
||||
before { params.delete(:password) }
|
||||
it { expect { should raise_error(Puppet::Error) } }
|
||||
end
|
||||
|
||||
it 'configures ceilometer user' do
|
||||
should contain_keystone_user( params[:auth_name] ).with(
|
||||
:ensure => 'present',
|
||||
:password => params[:password],
|
||||
:email => params[:email],
|
||||
:tenant => params[:tenant]
|
||||
)
|
||||
let :params do
|
||||
{ :password => 'ceil0met3r-passZord' }
|
||||
end
|
||||
|
||||
it 'configures ceilometer user roles' do
|
||||
should contain_keystone_user_role("#{params[:auth_name]}@#{params[:tenant]}").with(
|
||||
:ensure => 'present',
|
||||
:roles => ['admin','ResellerAdmin']
|
||||
)
|
||||
context 'with the required parameters' do
|
||||
it 'configures ceilometer user' do
|
||||
should contain_keystone_user( default_params[:auth_name] ).with(
|
||||
:ensure => 'present',
|
||||
:password => params[:password],
|
||||
:email => default_params[:email],
|
||||
:tenant => default_params[:tenant]
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures ceilometer user roles' do
|
||||
should contain_keystone_user_role("#{default_params[:auth_name]}@#{default_params[:tenant]}").with(
|
||||
:ensure => 'present',
|
||||
:roles => ['admin','ResellerAdmin']
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures ceilometer service' do
|
||||
should contain_keystone_service( default_params[:auth_name] ).with(
|
||||
:ensure => 'present',
|
||||
:type => default_params[:service_type],
|
||||
:description => 'Openstack Metering Service'
|
||||
)
|
||||
end
|
||||
|
||||
it 'configure ceilometer endpoints' do
|
||||
should contain_keystone_endpoint("#{default_params[:region]}/#{default_params[:auth_name]}").with(
|
||||
:ensure => 'present',
|
||||
:public_url => "#{default_params[:public_protocol]}://#{default_params[:public_address]}:#{default_params[:port]}",
|
||||
:admin_url => "#{default_params[:admin_protocol]}://#{default_params[:admin_address]}:#{default_params[:port]}",
|
||||
:internal_url => "#{default_params[:internal_protocol]}://#{default_params[:internal_address]}:#{default_params[:port]}"
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
it 'configures ceilometer service' do
|
||||
should contain_keystone_service( params[:auth_name] ).with(
|
||||
:ensure => 'present',
|
||||
:type => params[:service_type],
|
||||
:description => 'Openstack Metering Service'
|
||||
)
|
||||
context 'with overriden parameters' do
|
||||
before do
|
||||
params.merge!({
|
||||
:email => 'mighty-ceilometer@remotehost',
|
||||
:auth_name => 'mighty-ceilometer',
|
||||
:service_type => 'cloud-measuring',
|
||||
:public_address => '10.0.0.1',
|
||||
:admin_address => '10.0.0.2',
|
||||
:internal_address => '10.0.0.3',
|
||||
:port => '65001',
|
||||
:region => 'RegionFortyTwo',
|
||||
:tenant => 'mighty-services',
|
||||
:public_protocol => 'https',
|
||||
:admin_protocol => 'ftp',
|
||||
:internal_protocol => 'gopher'
|
||||
})
|
||||
end
|
||||
|
||||
it 'configures ceilometer user' do
|
||||
should contain_keystone_user( params[:auth_name] ).with(
|
||||
:ensure => 'present',
|
||||
:password => params[:password],
|
||||
:email => params[:email],
|
||||
:tenant => params[:tenant]
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures ceilometer user roles' do
|
||||
should contain_keystone_user_role("#{params[:auth_name]}@#{params[:tenant]}").with(
|
||||
:ensure => 'present',
|
||||
:roles => ['admin','ResellerAdmin']
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures ceilometer service' do
|
||||
should contain_keystone_service( params[:auth_name] ).with(
|
||||
:ensure => 'present',
|
||||
:type => params[:service_type],
|
||||
:description => 'Openstack Metering Service'
|
||||
)
|
||||
end
|
||||
|
||||
it 'configure ceilometer endpoints' do
|
||||
should contain_keystone_endpoint("#{params[:region]}/#{params[:auth_name]}").with(
|
||||
:ensure => 'present',
|
||||
:public_url => "#{params[:public_protocol]}://#{params[:public_address]}:#{params[:port]}",
|
||||
:admin_url => "#{params[:admin_protocol]}://#{params[:admin_address]}:#{params[:port]}",
|
||||
:internal_url => "#{params[:internal_protocol]}://#{params[:internal_address]}:#{params[:port]}"
|
||||
)
|
||||
end
|
||||
|
||||
context 'with overriden full uri' do
|
||||
before do
|
||||
params.merge!({
|
||||
:public_url => 'https://public.host:443/ceilometer_pub',
|
||||
:admin_url => 'https://admin.host/ceilometer_adm',
|
||||
:internal_url => 'http://internal.host:80/ceilometer_int',
|
||||
})
|
||||
end
|
||||
it 'configure ceilometer endpoints' do
|
||||
should contain_keystone_endpoint("#{params[:region]}/#{params[:auth_name]}").with(
|
||||
:ensure => 'present',
|
||||
:public_url => params[:public_url],
|
||||
:admin_url => params[:admin_url],
|
||||
:internal_url => params[:internal_url]
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with configure_endpoint = false' do
|
||||
before do
|
||||
params.delete!(:configure_endpoint)
|
||||
it 'does not configure ceilometer endpoints' do
|
||||
should_not contain_keystone_endpoint("#{params[:region]}/#{params[:auth_name]}")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it 'configure ceilometer endpoints' do
|
||||
should contain_keystone_endpoint("#{params[:region]}/#{params[:auth_name]}").with(
|
||||
:ensure => 'present',
|
||||
:public_url => "#{params[:public_protocol]}://#{params[:public_address]}:#{params[:port]}",
|
||||
:admin_url => "http://#{params[:admin_address]}:#{params[:port]}",
|
||||
:internal_url => "http://#{params[:internal_address]}:#{params[:port]}"
|
||||
)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user