From 2772354240b88c0019bc6964fa63f3b41a995d83 Mon Sep 17 00:00:00 2001 From: whitestar Date: Mon, 19 Oct 2015 22:18:49 +0900 Subject: [PATCH] add rspec examples to the ganglia cookbook and bug fix. --- cookbooks/ganglia/Berksfile | 24 +++++++ cookbooks/ganglia/spec/recipes/gmetad_spec.rb | 69 +++++++++++++++++++ cookbooks/ganglia/spec/recipes/gmond_spec.rb | 69 +++++++++++++++++++ cookbooks/ganglia/spec/recipes/web_spec.rb | 79 ++++++++++++++++++++++ cookbooks/ganglia/spec/spec_helper.rb | 46 +++++++++++++ .../templates/centos/etc/ganglia/gmond.conf | 2 +- 6 files changed, 288 insertions(+), 1 deletion(-) create mode 100644 cookbooks/ganglia/Berksfile create mode 100644 cookbooks/ganglia/spec/recipes/gmetad_spec.rb create mode 100644 cookbooks/ganglia/spec/recipes/gmond_spec.rb create mode 100644 cookbooks/ganglia/spec/recipes/web_spec.rb create mode 100644 cookbooks/ganglia/spec/spec_helper.rb diff --git a/cookbooks/ganglia/Berksfile b/cookbooks/ganglia/Berksfile new file mode 100644 index 0000000..08f0a44 --- /dev/null +++ b/cookbooks/ganglia/Berksfile @@ -0,0 +1,24 @@ +# +# Copyright 2015 whitestar +# +# 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. +# + +#grid_chef_repo = 'git://git.osdn.jp/gitroot/metasearch/grid-chef-repo.git' + +# for ver. 3.x +source 'https://gpm00.grid.example.com:6280' +source 'https://supermarket.chef.io' + +metadata + diff --git a/cookbooks/ganglia/spec/recipes/gmetad_spec.rb b/cookbooks/ganglia/spec/recipes/gmetad_spec.rb new file mode 100644 index 0000000..e216be0 --- /dev/null +++ b/cookbooks/ganglia/spec/recipes/gmetad_spec.rb @@ -0,0 +1,69 @@ +# +# Cookbook Name:: ganglia +# Recipe Spec:: gmetad_spec +# +# Copyright 2015, whitestar +# +# 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_relative '../spec_helper' + +describe 'ganglia::gmetad' do + let(:chef_run_on_debian) { + ChefSpec::SoloRunner.new(platform: 'debian', version: '7.6') {|node| + node.set['ganglia']['gridname'] = 'Grid' + }.converge(described_recipe) + } + + it 'installs gmetad package on debian family.' do + expected = expect(chef_run_on_debian) + expected.to install_package('gmetad') + expected.to enable_service('gmetad') + end + + it 'renders /etc/ganglia/gmetad.conf on debian family.' do + expect(chef_run_on_debian).to \ + render_file('/etc/ganglia/gmetad.conf'). + with_content(%r|^gridname\s+Grid$|) + end + + it 'notifies gmetad service\'s restart after rendering on debian family.' do + expect(chef_run_on_debian.template('/etc/ganglia/gmetad.conf')).to \ + notify('service[gmetad]').to(:restart).delayed + end + + let(:chef_run_on_rhel) { + ChefSpec::SoloRunner.new(platform: 'centos', version: '7.0') {|node| + node.set['ganglia']['gridname'] = 'Grid' + }.converge(described_recipe) + } + + it 'installs ganglia-gmetad package on rhel family.' do + expected = expect(chef_run_on_rhel) + expected.to install_package('ganglia-gmetad') + expected.to enable_service('gmetad') + end + + it 'renders /etc/ganglia/gmetad.conf on rhel family.' do + expect(chef_run_on_rhel).to \ + render_file('/etc/ganglia/gmetad.conf'). + with_content(%r|^gridname\s+Grid$|) + end + + it 'notifies gmetad service\'s restart after rendering on rhel family.' do + expect(chef_run_on_rhel.template('/etc/ganglia/gmetad.conf')).to \ + notify('service[gmetad]').to(:restart).delayed + end +end + diff --git a/cookbooks/ganglia/spec/recipes/gmond_spec.rb b/cookbooks/ganglia/spec/recipes/gmond_spec.rb new file mode 100644 index 0000000..d3a34e0 --- /dev/null +++ b/cookbooks/ganglia/spec/recipes/gmond_spec.rb @@ -0,0 +1,69 @@ +# +# Cookbook Name:: ganglia +# Recipe Spec:: gmond_spec +# +# Copyright 2015, whitestar +# +# 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_relative '../spec_helper' + +describe 'ganglia::gmond' do + let(:chef_run_on_debian) { + ChefSpec::SoloRunner.new(platform: 'debian', version: '7.6') {|node| + node.set['ganglia']['host']['location'] = 'specified' + }.converge(described_recipe) + } + + it 'installs ganglia-monitor package on debian family.' do + expected = expect(chef_run_on_debian) + expected.to install_package('ganglia-monitor') + expected.to enable_service('ganglia-monitor') + end + + it 'renders /etc/ganglia/gmond.conf on debian family.' do + expect(chef_run_on_debian).to \ + render_file('/etc/ganglia/gmond.conf'). + with_content(%r|^\s+location\s+=\s+"specified"$|) + end + + it 'notifies ganglia-monitor service\'s restart after rendering on debian family.' do + expect(chef_run_on_debian.template('/etc/ganglia/gmond.conf')).to \ + notify('service[ganglia-monitor]').to(:restart).delayed + end + + let(:chef_run_on_rhel) { + ChefSpec::SoloRunner.new(platform: 'centos', version: '7.0') {|node| + node.set['ganglia']['host']['location'] = 'specified' + }.converge(described_recipe) + } + + it 'installs ganglia-gmond package on rhel family.' do + expected = expect(chef_run_on_rhel) + expected.to install_package('ganglia-gmond') + expected.to enable_service('gmond') + end + + it 'renders /etc/ganglia/gmond.conf on rhel family.' do + expect(chef_run_on_rhel).to \ + render_file('/etc/ganglia/gmond.conf'). + with_content(%r|^\s+location\s+=\s+"specified"$|) + end + + it 'notifies gmond service\'s restart after rendering on rhel family.' do + expect(chef_run_on_rhel.template('/etc/ganglia/gmond.conf')).to \ + notify('service[gmond]').to(:restart).delayed + end +end + diff --git a/cookbooks/ganglia/spec/recipes/web_spec.rb b/cookbooks/ganglia/spec/recipes/web_spec.rb new file mode 100644 index 0000000..edc9496 --- /dev/null +++ b/cookbooks/ganglia/spec/recipes/web_spec.rb @@ -0,0 +1,79 @@ +# +# Cookbook Name:: ganglia +# Recipe Spec:: web_spec +# +# Copyright 2015, whitestar +# +# 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_relative '../spec_helper' + +describe 'ganglia::web' do + let(:chef_run_on_debian) { + ChefSpec::SoloRunner.new(platform: 'debian', version: '7.6') {|node| + node.set['ganglia']['web']['AuthType'] = 'Kerberos' + }.converge(described_recipe) + } + + it 'installs ganglia webfrontend packages on debian family.' do + expected = expect(chef_run_on_debian) + expected.to install_package('apache2') + expected.to install_package('ganglia-webfrontend') + expected.to install_package('php5-gd') + expected.to install_package('libapache2-mod-auth-kerb') + expected.to enable_service('apache2') + end + + it 'links /etc/apache2/conf.d/ganglia-webfrontend.conf to /etc/ganglia-webfrontend/apache.conf' do + expect(chef_run_on_debian).to \ + create_link('/etc/apache2/conf.d/ganglia-webfrontend.conf'). + with(to: '/etc/ganglia-webfrontend/apache.conf') + end + + it 'renders /etc/ganglia-webfrontend/apache.conf on debian family.' do + expect(chef_run_on_debian).to \ + render_file('/etc/ganglia-webfrontend/apache.conf'). + with_content(%r|^\s+AuthType\s+Kerberos$|) + end + + it 'notifies apache2 service\'s restart after rendering on debian family.' do + expect(chef_run_on_debian.template('/etc/ganglia-webfrontend/apache.conf')).to \ + notify('service[apache2]').to(:restart).delayed + end + + let(:chef_run_on_rhel) { + ChefSpec::SoloRunner.new(platform: 'centos', version: '7.0') {|node| + node.set['ganglia']['web']['AuthType'] = 'Kerberos' + }.converge(described_recipe) + } + + it 'installs ganglia-web package on rhel family.' do + expected = expect(chef_run_on_rhel) + expected.to install_package('ganglia-web') + expected.to install_package('mod_auth_kerb') + expected.to enable_service('httpd') + end + + it 'renders /etc/httpd/conf.d/ganglia.conf on rhel family.' do + expect(chef_run_on_rhel).to \ + render_file('/etc/httpd/conf.d/ganglia.conf'). + with_content(%r|^\s+AuthType\s+Kerberos$|) + end + + it 'notifies httpd service\'s restart after rendering on rhel family.' do + expect(chef_run_on_rhel.template('/etc/httpd/conf.d/ganglia.conf')).to \ + notify('service[httpd]').to(:restart).delayed + end +end + diff --git a/cookbooks/ganglia/spec/spec_helper.rb b/cookbooks/ganglia/spec/spec_helper.rb new file mode 100644 index 0000000..0232d95 --- /dev/null +++ b/cookbooks/ganglia/spec/spec_helper.rb @@ -0,0 +1,46 @@ +# +# Cookbook Name:: ganglia +# Recipe Spec:: spec_helper +# +# Copyright 2015, whitestar +# +# 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. +# + +# Added by ChefSpec +require 'chefspec' + +# Uncomment to use ChefSpec's Berkshelf extension +require 'chefspec/berkshelf' + +ChefSpec::Coverage.start! + +RSpec.configure do |config| + # Specify the path for Chef Solo to find cookbooks + #config.cookbook_path = "#{File.dirname(__FILE__)}/../../cookbooks" + + # Specify the path for Chef Solo to find roles + # config.role_path = '/var/roles' + + # Specify the Chef log_level (default: :warn) + # config.log_level = :debug + + # Specify the path to a local JSON file with Ohai data + # config.path = 'ohai.json' + + # Specify the operating platform to mock Ohai data from + # config.platform = 'ubuntu' + + # Specify the operating version to mock Ohai data from + # config.version = '12.04' +end diff --git a/cookbooks/ganglia/templates/centos/etc/ganglia/gmond.conf b/cookbooks/ganglia/templates/centos/etc/ganglia/gmond.conf index 228b135..a4fafde 100644 --- a/cookbooks/ganglia/templates/centos/etc/ganglia/gmond.conf +++ b/cookbooks/ganglia/templates/centos/etc/ganglia/gmond.conf @@ -63,7 +63,7 @@ cluster { /* The host section describes attributes of the host, like the location */ host { - location = "unspecified" + location = "<%= node['ganglia']['host']['location'] %>" } /* Feel free to specify as many udp_send_channels as you like. Gmond -- 2.11.0