A Puppet module to manage Traefik
You can just include traefik
or set some basic parameters:
class { 'traefik':
version => '1.0.0-rc1',
config_hash => {
'accessLogsFile' => '/var/log/traefik/access.log',
'logLevel' => 'INFO'
},
}
Different sections of Traefik's TOML configuration file can be defined with the traefik::config::section
type. The name of the Puppet resource, in this case 'web' is used for the top-level of the resulting hash and will result in a table [web] in the TOML file:
traefik::config::section { 'web':
description => 'API backend',
order => '10',
hash => {'address' => ':9090'}
}
Hashes can be nested to produce nested TOML tables. The following resource will output the common http and https EntryPoints.
traefik::config::section { 'entryPoints':
hash => {
'http' => {
'address' => ':80'
},
'https' => {
'address' => ':443',
'tls' => {}
}
}
}
Configuring backends and frontends using hashes in traefik::config::section
resources can quickly get tedious. The traefik::config::file
class and traefik::config::file_rule
defined type make setting this up a bit easier.
To start, configure some basics for the file backend:
class { 'traefik::config::file':
filename => 'rules.toml',
watch => true
}
This will set up Traefik to read configuration for the file backend from a file called rules.toml
and to watch that file for changes. Next, we create some frontend and backend rules:
traefik::config::file_rule { 'my-service':
frontend => {
'routes' => {
'test_1' => {
'rule' => 'Host:my-service.example.com'
}
}
},
backend => {
'servers' => {
'server1' => {
'url' => 'http://172.17.0.2:80',
'weight' => 10
},
'server2' => {
'url' => 'http://172.17.0.3:80',
'weight' => 1
}
}
}
}
This should produce (roughly) the following config in rules.toml
:
[frontends.my-service-frontend]
backend = 'my-service-backend'
[frontends.my-service-frontend.routes.test_1]
rule = "Host:my-service.example.com"
[backends.my-service-backend.servers.server1]
url = "http://172.17.0.2:80"
weight = 10
[backends.my-service-backend.servers.server2]
url = "http://172.17.0.3:80"
weight = 1
- Currently only works on Ubuntu 14.04 and Debian 8 (pull requests welcome).
- Uses the
toml-rb
gem to generate config with a parser function. This means that your Puppet server must have the gem correctly installed. See this page for Puppet 4 instructions. - There is no validation on config parameters. Everything (and anything) can be specified via hashes.