Add lma_collector::collectd::openstack
This adds an lma_collector::collectd::openstack define that, when declared, configures collectd to collect statistics from an OpenStack service endpoint. Usage example: lma_collector::collectd::openstack { 'nova': keystone_url => 'http://example.com/keystone' } Works for 'nova', 'cinder', 'glance', 'keystone', and 'neutron'. Change-Id: I200a1b3de3b2385292e7b17489621382dc2b2e62
This commit is contained in:
parent
b7b0857d56
commit
b6c3c1d62d
|
@ -0,0 +1,58 @@
|
|||
# Copyright 2016 Mirantis, Inc.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
define lma_collector::collectd::openstack (
|
||||
$user,
|
||||
$password,
|
||||
$tenant,
|
||||
$keystone_url,
|
||||
$timeout = undef,
|
||||
$pacemaker_master_resource = undef,
|
||||
) {
|
||||
|
||||
include lma_collector::params
|
||||
include lma_collector::collectd::python_openstack_base
|
||||
|
||||
$service = $title
|
||||
|
||||
$supported_services = ['nova', 'cinder', 'glance', 'keystone', 'neutron']
|
||||
if ! member($supported_services, $service) {
|
||||
fail("service '${service}' is not supported")
|
||||
}
|
||||
|
||||
$real_timeout = $timeout ? {
|
||||
undef => $lma_collector::params::openstack_client_timeout,
|
||||
default => $timeout,
|
||||
}
|
||||
|
||||
$config = {
|
||||
'Username' => "\"${user}\"",
|
||||
'Password' => "\"${password}\"",
|
||||
'Tenant' => "\"${tenant}\"",
|
||||
'KeystoneUrl' => "\"${keystone_url}\"",
|
||||
'Timeout' => "\"${real_timeout}\"",
|
||||
}
|
||||
|
||||
if $pacemaker_master_resource {
|
||||
$real_config = merge($config, {'DependsOnResource' => "\"${pacemaker_master_resource}\""})
|
||||
} else {
|
||||
$real_config = $config
|
||||
}
|
||||
|
||||
lma_collector::collectd::python { "openstack_${title}":
|
||||
config => $real_config,
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
# Copyright 2016 Mirantis, Inc.
|
||||
#
|
||||
# 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 lma_collector::collectd::python_openstack_base {
|
||||
include collectd::params
|
||||
include lma_collector::collectd::python_base
|
||||
|
||||
$modulepath = $lma_collector::collectd::python_base::modulepath
|
||||
|
||||
# The collectd module does not provide a way to add a Python file to Python
|
||||
# directory without declaring a corresponding module in the collectd Python
|
||||
# configuration file. For that reason we need to use a "file" resource and
|
||||
# notify the "collectd" service resource ourselves. The "collectd" service
|
||||
# resource is private to the "collectd" module, but we have no choice.
|
||||
|
||||
file { 'openstack.script':
|
||||
ensure => 'present',
|
||||
path => "${modulepath}/openstack.py",
|
||||
owner => 'root',
|
||||
group => $collectd::params::root_group,
|
||||
mode => '0640',
|
||||
source => 'puppet:///modules/lma_collector/collectd/openstack.py',
|
||||
require => Class['lma_collector::collectd::python_base'],
|
||||
notify => Service['collectd'],
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
# Copyright 2016 Mirantis, Inc.
|
||||
#
|
||||
# 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.
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'lma_collector::collectd::python_openstack_base' do
|
||||
let(:facts) do
|
||||
{:kernel => 'Linux', :operatingsystem => 'Ubuntu',
|
||||
:osfamily => 'Debian', :concat_basedir => '/foo'}
|
||||
end
|
||||
|
||||
describe 'with defaults' do
|
||||
it { is_expected.to contain_file('openstack.script').with({
|
||||
:ensure => 'present',
|
||||
:path => '/usr/lib/collectd/openstack.py',
|
||||
:owner => 'root',
|
||||
:group => 'root',
|
||||
:mode => '0640',
|
||||
}) }
|
||||
end
|
||||
end
|
|
@ -0,0 +1,45 @@
|
|||
# Copyright 2016 Mirantis, Inc.
|
||||
#
|
||||
# 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.
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'lma_collector::collectd::openstack' do
|
||||
let(:title) { :nova }
|
||||
let(:facts) do
|
||||
{:kernel => 'Linux', :operatingsystem => 'Ubuntu',
|
||||
:osfamily => 'Debian', :concat_basedir => '/foo'}
|
||||
end
|
||||
|
||||
describe 'with required params' do
|
||||
let(:title) { :nova }
|
||||
let(:params) {{:user => "user", :password => "password", :tenant => "tenant",
|
||||
:keystone_url => "http://example.com/keystone"}}
|
||||
it { is_expected.to contain_lma_collector__collectd__python('openstack_nova') \
|
||||
.with_config({"Username" => '"user"', "Password" => '"password"',
|
||||
"Tenant" => '"tenant"',
|
||||
"KeystoneUrl" => '"http://example.com/keystone"',
|
||||
"Timeout" => '"5"'}) }
|
||||
end
|
||||
|
||||
describe 'with required and optional params' do
|
||||
let(:title) { :nova }
|
||||
let(:params) {{:user => "user", :password => "password", :tenant => "tenant",
|
||||
:keystone_url => "http://example.com/keystone",
|
||||
:timeout => 10, :pacemaker_master_resource => "vip__management"}}
|
||||
it { is_expected.to contain_lma_collector__collectd__python('openstack_nova') \
|
||||
.with_config({"Username" => '"user"', "Password" => '"password"',
|
||||
"Tenant" => '"tenant"',
|
||||
"KeystoneUrl" => '"http://example.com/keystone"',
|
||||
"Timeout" => '"10"', "DependsOnResource" => '"vip__management"'}) }
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue