Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F11012827
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
9 KB
Subscribers
None
View Options
diff --git a/Modulefile b/Modulefile
index f34d179..61e6fa3 100644
--- a/Modulefile
+++ b/Modulefile
@@ -1,11 +1,11 @@
name 'deric-zookeeper'
version '0.2.5'
source 'https://github.com/deric/puppet-zookeeper'
author 'Tomas Barton'
license 'Apache License, Version 2.0'
summary 'Module for managing Apache Zookeeper'
description 'ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.'
project_page 'https://github.com/deric/puppet-zookeeper'
dependency 'puppetlabs/stdlib', '>= 0.1.6'
-dependency 'puppetlabs/concat', '>=1.0.0'
+dependency 'richardc/datacat', '>=0.4.0'
diff --git a/Puppetfile b/Puppetfile
index 8edc2ca..0c0dfcd 100644
--- a/Puppetfile
+++ b/Puppetfile
@@ -1,4 +1,4 @@
forge 'http://forge.puppetlabs.com'
mod 'puppetlabs/stdlib', '>=0.1.6'
-mod 'puppetlabs/concat', '>=1.0.0'
+mod 'richardc/datacat', '>=0.4.0'
diff --git a/Puppetfile.lock b/Puppetfile.lock
index 4874f3a..fd9756d 100644
--- a/Puppetfile.lock
+++ b/Puppetfile.lock
@@ -1,11 +1,10 @@
FORGE
remote: http://forge.puppetlabs.com
specs:
- puppetlabs/concat (1.1.0-rc1)
- puppetlabs/stdlib (>= 3.0.0)
puppetlabs/stdlib (4.1.0)
+ richardc/datacat (0.4.3)
DEPENDENCIES
- puppetlabs/concat (>= 1.0.0)
puppetlabs/stdlib (>= 0.1.6)
+ richardc/datacat (>= 0.4.0)
diff --git a/manifests/config.pp b/manifests/config.pp
index cc48bcf..9501dc3 100644
--- a/manifests/config.pp
+++ b/manifests/config.pp
@@ -1,126 +1,121 @@
# Class: zookeeper::config
#
# This module manages the zookeeper configuration directories
#
# Parameters:
# [* id *] zookeeper instance id: between 1 and 255
#
# [* servers *] an Array - specify all zookeeper servers
# The fist port is used by followers to connect to the leader
# The second one is used for leader election
# server.1=zookeeper1:2888:3888
# server.2=zookeeper2:2888:3888
# server.3=zookeeper3:2888:3888
#
#
# Actions: None
#
# Requires: zookeeper::install, zookeeper
#
# Sample Usage: include zookeeper::config
#
class zookeeper::config(
$id = '1',
$datastore = '/var/lib/zookeeper',
$client_ip = $::ipaddress,
$client_port = 2181,
$election_port = 2888,
$leader_port = 3888,
$snap_count = 10000,
$log_dir = '/var/log/zookeeper',
$cfg_dir = '/etc/zookeeper/conf',
$user = 'zookeeper',
$group = 'zookeeper',
$java_bin = '/usr/bin/java',
$java_opts = '',
$pid_dir = '/var/run/zookeeper',
$pid_file = '$PIDDIR/zookeeper.pid',
$zoo_main = 'org.apache.zookeeper.server.quorum.QuorumPeerMain',
$log4j_prop = 'INFO,ROLLINGFILE',
$servers = [''],
# since zookeeper 3.4, for earlier version cron task might be used
$snap_retain_count = 3,
# interval in hours, purging enabled when >= 1
$purge_interval = 0,
# log4j properties
$rollingfile_threshold = 'ERROR',
$tracefile_threshold = 'TRACE',
$max_allowed_connections = 10,
$export_tag = 'zookeeper',
) {
require zookeeper::install
include concat::setup
Concat::Fragment <<| tag == $export_tag |>>
file { $cfg_dir:
ensure => directory,
owner => $user,
group => $group,
recurse => true,
mode => '0644',
}
file { $log_dir:
ensure => directory,
owner => $user,
group => $group,
recurse => true,
mode => '0644',
}
file { $datastore:
ensure => directory,
owner => $user,
group => $group,
mode => '0644',
recurse => true,
}
file { "${cfg_dir}/myid":
ensure => file,
content => template('zookeeper/conf/myid.erb'),
owner => $user,
group => $group,
mode => '0644',
require => File[$cfg_dir],
notify => Class['zookeeper::service'],
}
file { "${cfg_dir}/zoo.cfg":
owner => $user,
group => $group,
mode => '0644',
content => template('zookeeper/conf/zoo.cfg.erb'),
notify => Class['zookeeper::service'],
}
file { "${cfg_dir}/environment":
owner => $user,
group => $group,
mode => '0644',
content => template('zookeeper/conf/environment.erb'),
notify => Class['zookeeper::service'],
}
file { "${cfg_dir}/log4j.properties":
owner => $user,
group => $group,
mode => '0644',
content => template('zookeeper/conf/log4j.properties.erb'),
notify => Class['zookeeper::service'],
}
- @@concat::fragment{ "zookeeper_${client_ip}":
- target => "${cfg_dir}/quorum.yml",
- content => " - 'server.${id}=${client_ip}:${election_port}:${leader_port}'\n",
- tag => 'zookeeper',
- }
-
- concat{ "${cfg_dir}/quorum.yml":
- owner => root,
- group => 0,
- mode => '0644',
- require => File[$cfg_dir],
+ # keep track of all hosts in a cluster
+ zookeeper::host { $client_ip:
+ id => $id,
+ client_ip => $client_ip,
+ election_port => $election_port,
+ leader_port => $leader_port,
}
}
diff --git a/manifests/host.pp b/manifests/host.pp
new file mode 100644
index 0000000..3a4b19e
--- /dev/null
+++ b/manifests/host.pp
@@ -0,0 +1,13 @@
+# zookeeper host
+
+define zookeeper::host($hostname = $title, $id, $client_ip, $election_port, $leader_port) {
+ datacat_fragment { "${hostname}":
+ target => '/etc/zookeeper/conf/quorum.conf',
+ data => {
+ 'id' => $id,
+ 'client_ip' => $client_ip,
+ 'election_port' => $election_port,
+ 'leader_port' => $leader_port,
+ },
+ }
+}
\ No newline at end of file
diff --git a/spec/classes/config_spec.rb b/spec/classes/config_spec.rb
index b4682d3..7af85ea 100644
--- a/spec/classes/config_spec.rb
+++ b/spec/classes/config_spec.rb
@@ -1,104 +1,109 @@
require 'spec_helper'
describe 'zookeeper::config' do
shared_examples 'debian-install' do |os, codename|
let(:facts) {{
:operatingsystem => os,
:osfamily => 'Debian',
:lsbdistcodename => codename,
}}
it { should contain_file(cfg_dir).with({
'ensure' => 'directory',
'owner' => user,
'group' => group,
}) }
it { should contain_file(log_dir).with({
'ensure' => 'directory',
'owner' => user,
'group' => group,
}) }
it { should contain_file(id_file).with({
'ensure' => 'file',
'owner' => user,
'group' => group,
}).with_content(myid) }
end
context 'on debian-like system' do
let(:user) { 'zookeeper' }
let(:group) { 'zookeeper' }
let(:cfg_dir) { '/etc/zookeeper/conf' }
let(:log_dir) { '/var/lib/zookeeper' }
let(:id_file) { '/etc/zookeeper/conf/myid' }
let(:myid) { /1/ }
it_behaves_like 'debian-install', 'Debian', 'wheezy'
end
context 'custom parameters' do
# set custom params
let(:params) { {
:id => '2',
:user => 'zoo',
:group => 'zoo',
:cfg_dir => '/var/lib/zookeeper/conf',
:log_dir => '/var/lib/zookeeper/log',
} }
let(:user) { 'zoo' }
let(:group) { 'zoo' }
let(:cfg_dir) { '/var/lib/zookeeper/conf' }
let(:log_dir) { '/var/lib/zookeeper/log' }
let(:id_file) { '/var/lib/zookeeper/conf/myid' }
let(:myid) { /2/ }
it_behaves_like 'debian-install', 'Debian', 'wheezy'
end
context 'extra parameters' do
snap_cnt = 15000
# set custom params
let(:params) { {
:log4j_prop => 'INFO,ROLLINGFILE',
:snap_count => snap_cnt,
} }
it {
should contain_file('/etc/zookeeper/conf/environment').with_content(/INFO,ROLLINGFILE/)
}
it {
should contain_file('/etc/zookeeper/conf/zoo.cfg').with_content(/snapCount=15000/)
}
end
context 'max allowed connections' do
max_conn = 15
let(:params) {{
:max_allowed_connections => max_conn
}}
it { should contain_file(
'/etc/zookeeper/conf/zoo.cfg'
).with_content(/maxClientCnxns=#{max_conn}/) }
end
context 'quorum file' do
ipaddress = '192.168.1.1'
let(:facts) {{
:ipaddress => ipaddress
}}
- it { should contain_file(
- '/etc/zookeeper/conf/quorum.yml'
+ it { should create_datacat_fragment('192.168.1.1').with_data(
+ {"id"=>"1", "client_ip"=>"192.168.1.1", "election_port"=>"2888", "leader_port"=>"3888"}
)}
- it { should contain_concat__fragment("zookeeper_#{ipaddress}") }
+ # it { should contain_file(
+ # '/etc/zookeeper/conf/quorum.yml'
+ # )}
+ #it { should contain_datacat__fragment("#{ipaddress}") }
+
+ # it { should contain_concat__fragment("zookeeper_#{ipaddress}") }
end
end
diff --git a/spec/defines/host_spec.rb b/spec/defines/host_spec.rb
new file mode 100644
index 0000000..ab42812
--- /dev/null
+++ b/spec/defines/host_spec.rb
@@ -0,0 +1,18 @@
+
+require 'spec_helper'
+
+describe 'zookeeper::host' do
+
+ let(:title) { 'localhost' }
+ let(:params) {{
+ :id => '1',
+ :client_ip => '192.168.1.1',
+ :election_port => 2222,
+ :leader_port => 3333,
+ }}
+
+ it { should contain_datacat_fragment('localhost') }
+ #it { should contain_datacat__collector('localhost') }
+
+end
+
diff --git a/templates/conf/quorum.conf.erb b/templates/conf/quorum.conf.erb
new file mode 100644
index 0000000..dc32640
--- /dev/null
+++ b/templates/conf/quorum.conf.erb
@@ -0,0 +1,7 @@
+# quorum conf
+<% @data.keys.sort.each do |host| %>
+- <%= host.client_ip %>
+ id: <%= host.id %>
+ election_port: <%= host.election_port %>
+ leader_port: <%= host.leader_port %>
+<% end %>
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Thu, Sep 18, 4:37 AM (1 d, 21 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3331514
Attached To
R146 puppet-deric-zookeeper
Event Timeline
Log In to Comment