Skip to content

Commit 11dbde1

Browse files
committed
make it a lot easier to define any kind of configuration values
So far one would have had to add for each configuration setting to set a dedicated parameter and add an ini_setting. This change introduces a simple hash structure to set configuration values. This hash matches the influxdb toml file structure. Unfortunately puppet doesn't yet have an easy way (puppetlabs/puppetlabs-inifile#129) to do things like that. Which means that I had to trick around a little bit with puppet data structures. This can be removed once create_ini_settings got merged into the inifile module, until then this is a workaround, that makes the configuration much more flexible.
1 parent 8daecf4 commit 11dbde1

14 files changed

Lines changed: 267 additions & 307 deletions

.fixtures.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
fixtures:
33
repositories:
44
inifile: https://github.com/puppetlabs/puppetlabs-inifile
5+
stdlib: https://github.com/puppetlabs/puppetlabs-stdlib
56
staging: https://github.com/nanliu/puppet-staging
67
symlinks:
78
influxdb: "#{source_dir}"

Puppetfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ forge 'http://forge.puppetlabs.com'
22

33
mod 'nanliu/staging', '>= 0.4.0'
44
mod 'puppetlabs/inifile', '>= 1.0.0'
5+
mod 'puppetlabs/stdlib', '>= 4.5.1'

Puppetfile.lock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ FORGE
33
specs:
44
nanliu/staging (0.4.0)
55
puppetlabs/inifile (1.0.3)
6+
puppetlabs/stdlib (4.5.1)
67

78
DEPENDENCIES
89
nanliu/staging (>= 0.4.0)
910
puppetlabs/inifile (>= 1.0.0)
11+
puppetlabs/stdlib (>= 4.5.1)
1012

manifests/config.pp

Lines changed: 13 additions & 208 deletions
Original file line numberDiff line numberDiff line change
@@ -1,213 +1,18 @@
11
# == Class: influxdb::config
22
# More information on these settings available at: http://influxdb.org/docs/configuration.html
3+
# create config options based on a hash or hierdata that looks like:
4+
#
5+
# influxdb::configuration:
6+
# default:
7+
# bind-address: '"0.0.0.0"'
8+
# storage:
9+
# dir: '/tmp/bla'
310
class influxdb::config {
4-
ini_setting { 'hostname':
5-
section => '',
6-
setting => 'hostname',
7-
value => "\"${influxdb::hostname}\"",
8-
}
9-
10-
ini_setting { 'bind_address':
11-
section => '',
12-
setting => 'bind-address',
13-
value => "\"${influxdb::bind_address}\"",
14-
}
15-
16-
# [logging]
17-
ini_setting { 'logging_level':
18-
section => 'logging',
19-
setting => 'level',
20-
value => "\"${influxdb::logging_level}\"",
21-
}
22-
23-
ini_setting { 'logging_file':
24-
section => 'logging',
25-
setting => 'file',
26-
value => "\"${influxdb::logging_file}\"",
27-
}
28-
29-
# [admin]
30-
ini_setting { 'admin_port':
31-
section => 'admin',
32-
setting => 'port',
33-
value => $influxdb::admin_port,
34-
}
35-
36-
ini_setting { 'admin_assets':
37-
section => 'admin',
38-
setting => 'assets',
39-
value => "\"${influxdb::admin_assets}\"",
40-
}
41-
42-
# [api]
43-
ini_setting { 'api_port':
44-
section => 'api',
45-
setting => 'port',
46-
value => $influxdb::api_port,
47-
}
48-
49-
ini_setting { 'api_read_timeout':
50-
section => 'api',
51-
setting => 'read-timeout',
52-
value => "\"${influxdb::api_read_timeout}\"",
53-
}
54-
55-
# [raft]
56-
ini_setting { 'raft_port':
57-
section => 'raft',
58-
setting => 'port',
59-
value => $influxdb::raft_port,
60-
}
61-
62-
ini_setting { 'raft_dir':
63-
section => 'raft',
64-
setting => 'dir',
65-
value => "\"${influxdb::raft_dir}\"",
66-
}
67-
68-
ini_setting { 'raft_election_timeout':
69-
section => 'raft',
70-
setting => 'election-timeout',
71-
value => "\"${influxdb::raft_election_timeout}\"",
72-
}
73-
74-
# [storage]
75-
ini_setting { 'storage_dir':
76-
section => 'storage',
77-
setting => 'dir',
78-
value => "\"${influxdb::storage_dir}\"",
79-
}
80-
81-
ini_setting { 'storage_write_buffer_size':
82-
section => 'storage',
83-
setting => 'write-buffer-size',
84-
value => $influxdb::storage_write_buffer_size,
85-
}
86-
87-
# [cluster]
88-
ini_setting { 'cluster_seed_servers':
89-
section => 'cluster',
90-
setting => 'seed-servers',
91-
value => $influxdb::cluster_seed_servers,
92-
}
93-
94-
ini_setting { 'cluster_protobuf_port':
95-
section => 'cluster',
96-
setting => 'protobuf_port',
97-
value => $influxdb::cluster_protobuf_port,
98-
}
99-
100-
ini_setting { 'cluster_protobuf_timeout':
101-
section => 'cluster',
102-
setting => 'protobuf_timeout',
103-
value => "\"${influxdb::cluster_protobuf_timeout}\"",
104-
}
105-
106-
ini_setting { 'cluster_protobuf_heartbeat':
107-
section => 'cluster',
108-
setting => 'protobuf_heartbeat',
109-
value => "\"${influxdb::cluster_protobuf_heartbeat}\"",
110-
}
111-
112-
ini_setting { 'cluster_protobuf_min_backoff':
113-
section => 'cluster',
114-
setting => 'protobuf_min_backoff',
115-
value => "\"${influxdb::cluster_protobuf_min_backoff}\"",
116-
}
117-
118-
ini_setting { 'cluster_protobuf_max_backoff':
119-
section => 'cluster',
120-
setting => 'protobuf_max_backoff',
121-
value => "\"${influxdb::cluster_protobuf_max_backoff}\"",
122-
}
123-
124-
ini_setting { 'cluster_write_buffer_size':
125-
section => 'cluster',
126-
setting => 'write-buffer-size',
127-
value => $influxdb::cluster_write_buffer_size,
128-
}
129-
130-
ini_setting { 'cluster_max_response_buffer_size':
131-
section => 'cluster',
132-
setting => 'max-response-buffer-size',
133-
value => $influxdb::cluster_max_response_buffer_size,
134-
}
135-
136-
ini_setting { 'cluster_concurrent_shard_query_limit':
137-
section => 'cluster',
138-
setting => 'concurrent-shard-query-limit',
139-
value => $influxdb::cluster_concurrent_shard_query_limit,
140-
}
141-
142-
# [leveldb]
143-
ini_setting { 'leveldb_max_open_files':
144-
section => 'leveldb',
145-
setting => 'max-open-files',
146-
value => $influxdb::leveldb_max_open_files,
147-
}
148-
149-
ini_setting { 'leveldb_lru_cache_size':
150-
section => 'leveldb',
151-
setting => 'lru-cache-size',
152-
value => "\"${influxdb::leveldb_lru_cache_size}\"",
153-
}
154-
155-
ini_setting { 'leveldb_max_open_shards':
156-
section => 'leveldb',
157-
setting => 'max-open-shards',
158-
value => $influxdb::leveldb_max_open_shards,
159-
}
160-
161-
ini_setting { 'leveldb_point_batch_size':
162-
section => 'leveldb',
163-
setting => 'point-batch-size',
164-
value => $influxdb::leveldb_point_batch_size,
165-
}
166-
167-
ini_setting { 'leveldb_point_write_size':
168-
section => 'leveldb',
169-
setting => 'point-write-size',
170-
value => $influxdb::leveldb_point_write_size,
171-
}
172-
173-
# [sharding]
174-
175-
# [wal]
176-
ini_setting { 'wal_dir':
177-
section => 'wal',
178-
setting => 'dir',
179-
value => "\"${influxdb::wal_dir}\"",
180-
}
181-
182-
ini_setting { 'wal_flush_after':
183-
section => 'wal',
184-
setting => 'flush-after',
185-
value => $influxdb::wal_flush_after,
186-
}
187-
188-
ini_setting { 'wal_bookmark_after':
189-
section => 'wal',
190-
setting => 'bookmark-after',
191-
value => $influxdb::wal_bookmark_after,
192-
}
193-
194-
ini_setting { 'wal_index_after':
195-
section => 'wal',
196-
setting => 'index-after',
197-
value => $influxdb::wal_index_after,
198-
}
199-
200-
ini_setting { 'wal_requests_per_logfile':
201-
section => 'wal',
202-
setting => 'requests-per-logfile',
203-
value => $influxdb::wal_requests_per_logfile,
204-
}
205-
206-
# defaults for all settings
207-
Ini_setting {
208-
ensure => present,
209-
path => $influxdb::config_path,
210-
notify => Service['influxdb'],
211-
require => Package['influxdb'],
11+
if !empty($influxdb::configuration) {
12+
$sections = keys($influxdb::configuration)
13+
influxdb::config_section{
14+
$sections:
15+
values => $influxdb::configuration
16+
}
21217
}
21318
}

manifests/config_section.pp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# manage the different config sections
2+
# this is just a wrapper to shuffle data around
3+
define influxdb::config_section(
4+
$values,
5+
){
6+
$names = prefix(keys($values[$name]),"${name}@")
7+
influxdb::config_section_values{
8+
$names:
9+
values => $values[$name]
10+
}
11+
}

manifests/config_section_values.pp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# manage the values of a certain config section.
2+
# this is just a wrapper to shuffle data around
3+
define influxdb::config_section_values(
4+
$values,
5+
) {
6+
if $name =~ /@/ and !($name =~ /^default@/) {
7+
$tmp = split($name,'@')
8+
$section = $tmp[0]
9+
$setting = $tmp[1]
10+
} else {
11+
$section = ''
12+
if $name =~ /^default@/ {
13+
$tmp = split($name,'@')
14+
$setting = $tmp[1]
15+
} else {
16+
$setting = $name
17+
}
18+
}
19+
influxdb::config_value{
20+
$name:
21+
section => $section,
22+
setting => $setting,
23+
value => $values[$setting]
24+
}
25+
}

manifests/config_value.pp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# set a certain config option
2+
# looks like:
3+
# influxdb::config_option{'bind_address':
4+
# section => '',
5+
# setting => 'bind-address',
6+
# value => '"0.0.0.0"'
7+
define influxdb::config_value(
8+
$section,
9+
$value,
10+
$setting = $name,
11+
) {
12+
ini_setting { $name:
13+
ensure => present,
14+
section => $section,
15+
setting => $setting,
16+
value => $value,
17+
path => $influxdb::config_path,
18+
notify => Service['influxdb'],
19+
require => Package['influxdb'],
20+
}
21+
}

manifests/init.pp

Lines changed: 5 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,12 @@
11
# == Class: influxdb
22
class influxdb (
3-
$ensure = $influxdb::params::ensure,
4-
$version = $influxdb::params::version,
5-
$install_from_repository = $influxdb::params::install_from_repository,
6-
$config_path = $influxdb::params::config_path,
7-
$hostname = $influxdb::params::hostname,
8-
$bind_address = $influxdb::params::bind_address,
9-
$logging_level = $influxdb::params::logging_level,
10-
$logging_file = $influxdb::params::logging_file,
11-
$admin_port = $influxdb::params::admin_port,
12-
$admin_assets = $influxdb::params::admin_assets,
13-
$api_port = $influxdb::params::api_port,
14-
$api_read_timeout = $influxdb::params::api_read_timeout,
15-
$raft_port = $influxdb::params::raft_port,
16-
$raft_dir = $influxdb::params::raft_dir,
17-
$raft_election_timeout = $influxdb::params::raft_election_timeout,
18-
$storage_dir = $influxdb::params::storage_dir,
19-
$storage_write_buffer_size = $influxdb::params::storage_write_buffer_size,
20-
$cluster_seed_servers = $influxdb::params::cluster_seed_servers,
21-
$cluster_protobuf_port = $influxdb::params::cluster_protobuf_port,
22-
$cluster_protobuf_timeout = $influxdb::params::cluster_protobuf_timeout,
23-
$cluster_protobuf_heartbeat = $influxdb::params::cluster_protobuf_heartbeat,
24-
$cluster_protobuf_min_backoff = $influxdb::params::cluster_protobuf_min_backoff,
25-
$cluster_protobuf_max_backoff = $influxdb::params::cluster_protobuf_max_backoff,
26-
$cluster_write_buffer_size = $influxdb::params::cluster_write_buffer_size,
27-
$cluster_max_response_buffer_size = $influxdb::params::cluster_max_response_buffer_size,
28-
$cluster_concurrent_shard_query_limit = $influxdb::params::cluster_concurrent_shard_query_limit,
29-
$leveldb_max_open_files = $influxdb::params::leveldb_max_open_files,
30-
$leveldb_lru_cache_size = $influxdb::params::leveldb_lru_cache_size,
31-
$leveldb_max_open_shards = $influxdb::params::leveldb_max_open_shards,
32-
$leveldb_point_batch_size = $influxdb::params::leveldb_point_batch_size,
33-
$leveldb_write_batch_size = $influxdb::params::leveldb_write_batch_size,
34-
$wal_dir = $influxdb::params::wal_dir,
35-
$wal_flush_after = $influxdb::params::wal_flush_after,
36-
$wal_bookmark_after = $influxdb::params::wal_bookmark_after,
37-
$wal_index_after = $influxdb::params::wal_index_after,
38-
$wal_requests_per_logfile = $influxdb::params::wal_requests_per_logfile,
3+
$ensure = $influxdb::params::ensure,
4+
$version = $influxdb::params::version,
5+
$install_from_repository = $influxdb::params::install_from_repository,
6+
$config_path = $influxdb::params::config_path,
7+
$configuration = $influxdb::params::configuration,
398
) inherits influxdb::params {
40-
419
class { 'influxdb::config': }
4210
class { 'influxdb::install': }
4311
class { 'influxdb::service': }
44-
4512
}

0 commit comments

Comments
 (0)