Merge "Add ceilometer"
diff --git a/files/apts/ceilometer-collector b/files/apts/ceilometer-collector
new file mode 100644
index 0000000..c67ade3
--- /dev/null
+++ b/files/apts/ceilometer-collector
@@ -0,0 +1,2 @@
+python-pymongo
+mongodb-server
diff --git a/files/rpms/ceilometer-collector b/files/rpms/ceilometer-collector
new file mode 100644
index 0000000..c5c855c
--- /dev/null
+++ b/files/rpms/ceilometer-collector
@@ -0,0 +1,2 @@
+mongodb-server
+pymongo
diff --git a/functions b/functions
index 86f4dd1..f61aed5 100644
--- a/functions
+++ b/functions
@@ -129,6 +129,10 @@
             if [[ ! $file_to_parse =~ cinder ]]; then
                 file_to_parse="${file_to_parse} cinder"
             fi
+        elif [[ $service == ceilometer-* ]]; then
+            if [[ ! $file_to_parse =~ ceilometer ]]; then
+                file_to_parse="${file_to_parse} ceilometer"
+            fi
         elif [[ $service == n-* ]]; then
             if [[ ! $file_to_parse =~ nova ]]; then
                 file_to_parse="${file_to_parse} nova"
@@ -406,6 +410,7 @@
         [[ ,${ENABLED_SERVICES}, =~ ,${service}, ]] && return 0
         [[ ${service} == "nova" && ${ENABLED_SERVICES} =~ "n-" ]] && return 0
         [[ ${service} == "cinder" && ${ENABLED_SERVICES} =~ "c-" ]] && return 0
+        [[ ${service} == "ceilometer" && ${ENABLED_SERVICES} =~ "ceilometer-" ]] && return 0
         [[ ${service} == "glance" && ${ENABLED_SERVICES} =~ "g-" ]] && return 0
         [[ ${service} == "quantum" && ${ENABLED_SERVICES} =~ "q-" ]] && return 0
     done
diff --git a/lib/ceilometer b/lib/ceilometer
new file mode 100644
index 0000000..069e539
--- /dev/null
+++ b/lib/ceilometer
@@ -0,0 +1,60 @@
+# lib/ceilometer
+# Install and start Ceilometer service
+
+# Dependencies:
+# - functions
+
+# stack.sh
+# ---------
+# install_XXX
+# configure_XXX
+# init_XXX
+# start_XXX
+# stop_XXX
+# cleanup_XXX
+
+# Print the commands being run so that we can see the command that triggers
+# an error.  It is also useful for following along as the install occurs.
+set -o xtrace
+
+
+# Defaults
+# --------
+
+# set up default directories
+CEILOMETER_DIR=$DEST/ceilometer
+CEILOMETER_CONF_DIR=/etc/ceilometer
+CEILOMETER_AGENT_CONF=$CEILOMETER_CONF_DIR/ceilometer-agent.conf
+CEILOMETER_COLLECTOR_CONF=$CEILOMETER_CONF_DIR/ceilometer-collector.conf
+
+# cleanup_ceilometer() - Remove residual data files, anything left over from previous
+# runs that a clean run would need to clean up
+function cleanup_ceilometer() {
+    # This function intentionally left blank
+    :
+}
+
+# configure_ceilometer() - Set config files, create data dirs, etc
+function configure_ceilometer() {
+    setup_develop $CEILOMETER_DIR
+    if [ ! -d $CEILOMETER_CONF_DIR ]; then
+        sudo mkdir -m 755 -p $CEILOMETER_CONF_DIR
+    fi
+    sudo chown `whoami` $CEILOMETER_CONF_DIR
+
+    # ceilometer confs are copy of /etc/nova/nova.conf which must exist first
+    grep -v format_string $NOVA_CONF_DIR/$NOVA_CONF > $CEILOMETER_AGENT_CONF
+    grep -v format_string $NOVA_CONF_DIR/$NOVA_CONF > $CEILOMETER_COLLECTOR_CONF
+}
+
+# install_ceilometer() - Collect source and prepare
+function install_ceilometer() {
+    git_clone $CEILOMETER_REPO $CEILOMETER_DIR $CEILOMETER_BRANCH
+}
+
+# start_ceilometer() - Start running processes, including screen
+function start_ceilometer() {
+    screen_it ceilometer-acompute "cd $CEILOMETER_DIR && $CEILOMETER_DIR/bin/ceilometer-agent-compute --config-file $CEILOMETER_AGENT_CONF"
+    screen_it ceilometer-acentral "cd $CEILOMETER_DIR && $CEILOMETER_DIR/bin/ceilometer-agent-central --config-file $CEILOMETER_AGENT_CONF"
+    screen_it ceilometer-collector "cd $CEILOMETER_DIR && $CEILOMETER_DIR/bin/ceilometer-collector --config-file $CEILOMETER_COLLECTOR_CONF"
+}
diff --git a/stack.sh b/stack.sh
index 100dd5c..2eef0c6 100755
--- a/stack.sh
+++ b/stack.sh
@@ -240,6 +240,7 @@
 
 # Get project function libraries
 source $TOP_DIR/lib/cinder
+source $TOP_DIR/lib/ceilometer
 
 # Set the destination directories for openstack projects
 NOVA_DIR=$DEST/nova
@@ -789,6 +790,9 @@
 if is_service_enabled cinder; then
     install_cinder
 fi
+if is_service_enabled ceilometer; then
+    install_ceilometer
+fi
 
 # Initialization
 # ==============
@@ -2119,6 +2123,10 @@
 if is_service_enabled cinder; then
     start_cinder
 fi
+if is_service_enabled ceilometer; then
+    configure_ceilometer
+    start_ceilometer
+fi
 screen_it horizon "cd $HORIZON_DIR && sudo tail -f /var/log/$APACHE_NAME/horizon_error.log"
 screen_it swift "cd $SWIFT_DIR && $SWIFT_DIR/bin/swift-proxy-server ${SWIFT_CONFIG_DIR}/proxy-server.conf -v"
 
diff --git a/stackrc b/stackrc
index c906f95..cd70284 100644
--- a/stackrc
+++ b/stackrc
@@ -24,6 +24,10 @@
 # Another option is http://review.openstack.org/p
 GIT_BASE=https://github.com
 
+# metering service
+CEILOMETER_REPO=https://github.com/stackforge/ceilometer.git
+CEILOMETER_BRANCH=master
+
 # volume service
 CINDER_REPO=${GIT_BASE}/openstack/cinder
 CINDER_BRANCH=master