Rely `puppet-cassandra` for backwards compatibility

With the release of `puppet-cassandra`, we can create a manifest that
maintains old `::midonet::cassandra` and passes parameters to the new
module to keep backwards compatibility.

Change-Id: I37cf934f97a9ab341739137018ceeb1854aed45a
This commit is contained in:
Jaume Devesa 2015-07-17 12:41:18 +02:00
parent 675eb25a8c
commit 3a1cb076dd
10 changed files with 230 additions and 6 deletions

View File

@ -6,4 +6,7 @@ fixtures:
stdlib: "puppetlabs-stdlib"
inifile: "puppetlabs-inifile"
zookeeper: "deric-zookeeper"
cassandra: "midonet-cassandra"
datacat: "richardc-datacat"
java: "puppetlabs-java"
module_data: "ripienaar-module_data"

View File

@ -3,3 +3,8 @@ midonet::zookeeper::servers:
- id: 1
host: 'localhost'
midonet::zookeeper::server_id: '1'
# Cassandra-based attributes
midonet::cassandra::seeds:
- 'localhost'
midonet::cassandra::seed_address: 'localhost'

View File

@ -27,3 +27,7 @@ midonet::neutron_plugin::midonet_api_ip: 'localhost'
midonet::neutron_plugin::username: 'fake_user'
midonet::neutron_plugin::password: 'fake_password'
midonet::neutron_plugin::project_id: 'service'
midonet::cassandra::conf_dir: '/etc/cassandra'
midonet::cassandra::pid_dir: '/var/run/cassandra'
midonet::cassandra::service_path: '/usr/sbin'

View File

@ -26,3 +26,7 @@ midonet::neutron_plugin::midonet_api_ip: 'localhost'
midonet::neutron_plugin::username: 'fake_user'
midonet::neutron_plugin::password: 'fake_password'
midonet::neutron_plugin::project_id: 'service'
midonet::cassandra::pid_dir: '/var/run/cassandra'
midonet::cassandra::conf_dir: '/etc/cassandra/default.conf'
midonet::cassandra::service_path: '/sbin'

130
manifests/cassandra.pp Normal file
View File

@ -0,0 +1,130 @@
# == Class: ::midonet::cassandra
#
# Install and run the cassandra component
#
# === Parameters
#
# [*seeds*]
# Full list of cassandra seeds that belong to a cluster.
# [*seed_address*]
# IP address to bind for this instance. (Must belong to the
# seeders list.
# [*storage_port*]
# Inter-node cluster communication port (defaulted to 7000).
# [*ssl_storage_port*]
# SSL Inter-node cluster communication port (defaulted to 7001).
# [*client_port*]
# Cassandra client port (defaulted to 9042).
# [*client_port_thrift*]
# Cassandra client port thrift (defaulted to 9160).
#
#
# === Examples
#
# * The easiest way to run the class is:
#
# include ::cassandra
#
# And a cassandra single-machine cluster will be installed, binding the
# 'localhost' address.
#
# * Run a single-machine cluster but binding a hostname or another address
# would be:
#
# class {'::midonet::cassandra':
# seeds => ['192.168.2.2'],
# seed_address => '192.168.2.2',
# storage_port => 7000,
# ssl_storage_port => 7001,
# client_port => 9042,
# client_port_thrift => 9042,
# }
#
# * All the ports must be configured the same in all the nodes in the cluster.
#
# * For cluster of nodes, use the same 'seeds' value, but change the
# seed_address of each node:
#
# - On node1
# class {'::midonet::cassandra':
# seeds => ['node_1', 'node_2', 'node_3'],
# seed_address => 'node_1'
# storage_port => 7000,
# ssl_storage_port => 7001,
# client_port => 9042,
# client_port_thrift => 9042,
# }
# - On node2
# class {'::midonet::cassandra':
# seeds => ['node_1', 'node_2', 'node_3'],
# seed_address => 'node_2'
# storage_port => 7000,
# ssl_storage_port => 7001,
# client_port => 9042,
# client_port_thrift => 9042,
# }
# - On node3
# class {'::midonet::cassandra':
# seeds => ['node_1', 'node_2', 'node_3'],
# seed_address => 'node_3'
# storage_port => 7000,
# ssl_storage_port => 7001,
# client_port => 9042,
# client_port_thrift => 9042,
# }
#
# NOTE: node_X can be either hostnames or ip addresses
# You can alternatively use the Hiera.yaml style:
#
# ::midonet::cassandra::seeds:
# - node_1
# - node_2
# - node_3
# ::midonet::cassandra::seed_address: 'node_1'
#
# === Authors
#
# Midonet (http://midonet.org)
#
# === Copyright
#
# Copyright (c) 2015 Midokura SARL, All Rights Reserved.
#
# 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 midonet::cassandra (
$seeds,
$seed_address,
$storage_port = '7000',
$ssl_storage_port = '7001',
$client_port = '9042',
$client_port_thrift = '9160',
$conf_dir,
$pid_dir,
$service_path)
{
class {'::cassandra':
seeds => $seeds,
seed_address => $seed_address,
storage_port => $storage_port,
ssl_storage_port => $ssl_storage_port,
client_port => $client_port,
client_port_thrift => $client_port_thrift,
conf_dir => $conf_dir,
pid_dir => $pid_dir,
service_path => $service_path
}
}

View File

@ -46,14 +46,14 @@ class midonet {
class {'::midonet::zookeeper': }
# Add cassandra
class {'::cassandra': }
class {'::midonet::cassandra': }
# Add midonet-agent
class { 'midonet::midonet_agent':
zk_servers => [{
'ip' => $::ipaddress}
],
require => [Class['::cassandra'], Class['::zookeeper']]
require => [Class['::midonet::cassandra'], Class['::midonet::zookeeper']]
}
# Add midonet-api

View File

@ -9,8 +9,8 @@ describe 'midonet all-in-one' do
EOS
# Run it twice for test the idempotency
apply_manifest(pp, :catch_failures => true)
apply_manifest(pp, :catch_failures => true)
apply_manifest(pp)
apply_manifest(pp)
end
end
end

View File

@ -1,4 +1,4 @@
HOSTS:
HOSTS:
ubuntu-14-04:
platform: ubuntu-14.04-x64
image: midonet/ubuntu:14.04

View File

@ -0,0 +1,76 @@
require 'spec_helper'
describe 'midonet::cassandra' do
let :params do
{
:seeds => ['192.168.7.2', '192.168.7.3', '192.168.7.4'],
:seed_address => '192.168.7.2'
}
end
shared_examples_for 'cluster cassandra' do
before do
params.merge!(os_params)
end
it 'should call cassandra module properly' do
is_expected.to contain_class('cassandra').with({
'seeds' => params[:seeds],
'seed_address' => params[:seed_address],
'storage_port' => '7000',
'ssl_storage_port' => '7001',
'client_port' => '9042',
'client_port_thrift' => '9160'
})
end
end
context 'on Debian' do
let :facts do
{
:osfamily => 'Debian',
:operatingsystem => 'Ubuntu',
:lsbdistrelease => '14.04',
:lsbdistid => 'Ubuntu',
:lsbdistcodename => 'trusty',
:ipaddress => '127.0.0.1',
:hostname => 'test.puppet'
}
end
let :os_params do
{
:pid_dir => '/var/run/cassandra',
:conf_dir => '/etc/cassandra',
:service_path => '/usr/sbin'
}
end
it_configures 'cluster cassandra'
end
context 'on RedHat' do
let :facts do
{
:osfamily => 'RedHat',
:operatingsystem => 'CentOS',
:operatingsystemmajrelease => 7,
:ipaddress => '127.0.0.1',
:hostname => 'test.puppet'
}
end
let :os_params do
{
:pid_dir => '/var/run/cassandra',
:conf_dir => '/etc/cassandra/default.conf',
:service_path => '/sbin'
}
end
it_configures 'cluster cassandra'
end
end

View File

@ -18,7 +18,9 @@ RSpec.configure do |c|
hosts.each do |host|
copy_module_to(host, :source => proj_root, :module_name => 'midonet')
scp_to(host, proj_root + '/data/hiera.yaml', "#{default['puppetpath']}/hiera.yaml")
shell("/bin/touch #{default['puppetpath']}/hiera.yaml")
scp_to(host, proj_root + '/data/common.yaml', "/var/lib/hiera")
scp_to(host, proj_root + '/data/osfamily', "/var/lib/hiera")
on host, puppet('module install ripienaar-module_data'), {:acceptable_exit_codes => [0,1] }
on host, puppet('module install puppetlabs-stdlib --version 4.5.0'), { :acceptable_exit_codes => [0,1] }
on host, puppet('module install deric-zookeeper'), {:acceptable_exit_codes => [0,1] }