@@ -0,0 +1,2 @@ | |||
.kitchen/ | |||
Gemfile.lock |
@@ -0,0 +1,55 @@ | |||
<% | |||
distrib, infos = ENV.fetch('DISTRIB', 'debian:stretch/9').split(':') | |||
codename, version = infos.split('/') | |||
%> | |||
--- | |||
driver: | |||
name: docker | |||
use_sudo: false | |||
provisioner: | |||
name: salt_solo | |||
formula: syslog_ng | |||
# Install Salt from official repositories | |||
salt_install: apt | |||
salt_version: latest | |||
salt_apt_repo: http://repo.saltstack.com/apt/<%= distrib %>/<%= version %>/amd64 | |||
salt_apt_repo_key: http://repo.saltstack.com/apt/<%= distrib %>/<%= version %>/amd64/latest/SALTSTACK-GPG-KEY.pub | |||
# Don't install Chef | |||
require_chef: false | |||
# Configure Salt | |||
state_top: | |||
base: | |||
'*': | |||
- syslog_ng.config | |||
<% if %w[wheezy jessie xenial].include?(codename) %> | |||
pillars: | |||
top.sls: | |||
base: | |||
'*': | |||
- syslog_ng | |||
syslog_ng.sls: | |||
syslog_ng: | |||
source: | |||
- s_src: | |||
- unix-stream: | |||
- /dev/log | |||
- internal: null | |||
<% end %> | |||
platforms: | |||
- name: <%= distrib %>-<%= codename %> | |||
driver_config: | |||
image: "<%= distrib %>:<%= codename %>" | |||
platform: <%= distrib %> | |||
verifier: | |||
name: inspec | |||
format: progress | |||
suites: | |||
- name: syslog_ng |
@@ -0,0 +1,15 @@ | |||
language: ruby | |||
sudo: required | |||
cache: bundler | |||
rvm: | |||
- 2.3.5 | |||
services: | |||
- docker | |||
script: | |||
- bundle exec kitchen test | |||
env: | |||
matrix: | |||
- DISTRIB=debian:wheezy/7 | |||
- DISTRIB=debian:jessie/8 | |||
- DISTRIB=debian:stretch/9 | |||
- DISTRIB=ubuntu:xenial/16.04 |
@@ -0,0 +1,8 @@ | |||
source 'https://rubygems.org' | |||
ruby '2.3.5' | |||
gem 'test-kitchen' | |||
gem 'kitchen-docker' | |||
gem 'kitchen-salt' | |||
gem 'kitchen-inspec' | |||
gem 'rake' |
@@ -1,14 +1,13 @@ | |||
Copyright (c) 2013-2015 Salt Stack Formulas | |||
Copyright (c) 2013-2017 Salt Stack Formulas | |||
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 | |||
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. | |||
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. |
@@ -0,0 +1,17 @@ | |||
# SyslogNG Salt Formula | |||
[![Build Status](https://travis-ci.org/saltstack-formulas/syslog-ng-formula.svg?branch=master)](https://travis-ci.org/saltstack-formulas/syslog-ng-formula) | |||
Install and configure the syslog-ng service. | |||
Note: See the full [Salt Formulas installation and usage instructions](http://docs.saltstack.com/en/latest/topics/development/conventions/formulas.html). | |||
## Available states | |||
* `syslog_ng` : Installs the `syslog-ng` package | |||
* `syslog_ng.config` : Installs and configures the `syslog-ng` package | |||
* `syslog_ng.packages` : Install optional packages which may provide additional functionalities | |||
## Available pillars | |||
You can take a loot at [`pillar.example`](https://github.com/saltstack-formulas/syslog-ng-formula/blob/master/pillar.example) to configure SyslogNG with pillars. |
@@ -1,33 +0,0 @@ | |||
========= | |||
syslog-ng | |||
========= | |||
Install and configure the syslog-ng service. | |||
.. note:: | |||
See the full `Salt Formulas installation and usage instructions | |||
<http://docs.saltstack.com/en/latest/topics/development/conventions/formulas.html>`_. | |||
Available states | |||
================ | |||
.. contents:: | |||
:local: | |||
``syslog_ng`` | |||
------- | |||
Install the ``syslog-ng`` package. | |||
``syslog_ng.config`` | |||
----------- | |||
Install and configure the ``syslog-ng`` package. | |||
note: if the first character of a string is '=' the string is treated as a literal (not ecapsulated in quotes) | |||
``syslog_ng.packages`` | |||
----------- | |||
Install optional packages which may provide additional functionality. |
@@ -2,7 +2,9 @@ syslog_ng: | |||
module: | |||
- tfson | |||
include: | |||
- /etc/syslog-ng/conf.d/ | |||
- scl.conf | |||
last_include: | |||
- /etc/syslog-ng/conf.d/*.conf | |||
version: 3.5 | |||
options: | |||
- threaded: yes | |||
@@ -12,7 +14,7 @@ syslog_ng: | |||
- chain_hostnames: no | |||
- check_hostname: no | |||
source: | |||
- s_internal: | |||
- s_internal: | |||
- internal: null | |||
- s_local: | |||
- unix-stream: /dev/log |
@@ -13,4 +13,3 @@ syslog_ng.conf: | |||
- mode: 644 | |||
- watch_in: | |||
- service: syslog_ng | |||
@@ -0,0 +1,4 @@ | |||
# -*- coding: utf-8 -*- | |||
# vim: ft=yaml | |||
syslog_ng: {} |
@@ -1,62 +1,43 @@ | |||
{%- set syslog_config = pillar.get('syslog_ng', {}) -%} | |||
{%- macro rule_builder(rule) -%} | |||
{%- if rule is none -%} | |||
{%- elif rule is sameas true -%} | |||
yes | |||
{%- elif rule is sameas false -%} | |||
no | |||
{%- elif rule is number -%} | |||
{{ rule }} | |||
{%- elif rule is mapping -%} | |||
{%- for k, v in rule.items() -%} | |||
{{ k }}({{ rule_builder(v) }}) | |||
{%- endfor -%} | |||
{%- elif rule is iterable and rule is not string -%} | |||
{%- for v in rule -%} | |||
{{ rule_builder(v) }} | |||
{%- endfor -%} | |||
{%- else -%} | |||
{%- if rule[0] == '=' -%} | |||
{{ rule[1:] }} | |||
{%- else -%} | |||
"{{ rule }}" | |||
{%- endif -%} | |||
{%- endif -%} | |||
{%- endmacro -%} | |||
@version: {{ syslog_config.get('version', '3.3') }} | |||
{%- for module in syslog_config.get('module', []) %} | |||
{%- from "syslog_ng/macro.jinja" import rule_builder -%} | |||
{%- from "syslog_ng/map.jinja" import syslog_ng with context -%} | |||
@version: {{ syslog_ng.get('version', '3.3') }} | |||
{%- for module in syslog_ng.get('module', []) %} | |||
@module {{ rule_builder(module) }} | |||
{%- endfor %} | |||
{%- for inc in syslog_config.get('include', []) %} | |||
{%- for inc in syslog_ng.get('include', []) %} | |||
@include {{ rule_builder(inc) }} | |||
{%- endfor %} | |||
options { | |||
{%- for rule in syslog_config.get('options', []) %} | |||
{{ rule_builder(rule) }}; | |||
{%- for rule in syslog_ng.get('options', []) %} | |||
{{ rule_builder(rule) }}; | |||
{%- endfor %} | |||
}; | |||
{%- for obj in ('source', 'destination', 'filter', 'parser', 'rewrite', 'template') %} | |||
{%- for params in syslog_config.get(obj, []) %} | |||
{%- for params in syslog_ng.get(obj, []) %} | |||
{% for name, rules in params.items() %} | |||
{{ obj }} {{ name }} { | |||
{%- for rule in rules %} | |||
{{ rule_builder(rule) }}; | |||
{%- endfor %} | |||
{%- for rule in rules %} | |||
{{ rule_builder(rule) }}; | |||
{%- endfor %} | |||
}; | |||
{%- endfor %} | |||
{%- endfor %} | |||
{%- endfor %} | |||
{% for loggers in syslog_config.get('log', []) -%} | |||
{% for loggers in syslog_ng.get('log', []) -%} | |||
log { | |||
{%- for rule in loggers %} | |||
{{ rule_builder(rule) }}; | |||
{{ rule_builder(rule) }}; | |||
{%- endfor %} | |||
}; | |||
{% endfor %} | |||
{%- for inc in syslog_ng.get('last_include', []) %} | |||
@include {{ rule_builder(inc) }} | |||
{%- endfor %} |
@@ -9,4 +9,3 @@ syslog_ng: | |||
- name: {{ syslog_ng.service }} | |||
- watch: | |||
- pkg: syslog_ng | |||
@@ -0,0 +1,27 @@ | |||
# -*- coding: utf-8 -*- | |||
# vim: ft=jinja | |||
{%- macro rule_builder(rule) -%} | |||
{%- if rule is none -%} | |||
{%- elif rule is sameas true -%} | |||
yes | |||
{%- elif rule is sameas false -%} | |||
no | |||
{%- elif rule is number -%} | |||
{{ rule }} | |||
{%- elif rule is mapping -%} | |||
{%- for k, v in rule.items() -%} | |||
{{ k }}({{ rule_builder(v) }}) | |||
{%- endfor -%} | |||
{%- elif rule is iterable and rule is not string -%} | |||
{%- for v in rule -%} | |||
{{ rule_builder(v) }} | |||
{%- endfor -%} | |||
{%- else -%} | |||
{%- if rule[0] == '=' -%} | |||
{{ rule[1:] }} | |||
{%- else -%} | |||
"{{ rule }}" | |||
{%- endif -%} | |||
{%- endif -%} | |||
{%- endmacro -%} |
@@ -1,20 +1,21 @@ | |||
{% set syslog_ng = salt['grains.filter_by']({ | |||
'Debian': { | |||
'package': 'syslog-ng', | |||
'service': 'syslog-ng', | |||
'syslog_ng_config': '/etc/syslog-ng/syslog-ng.conf', | |||
'syslog_ng_config_src': 'salt://syslog_ng/files/syslog-ng.conf', | |||
}, | |||
'Gentoo': { | |||
'package': 'app-admin/syslog-ng', | |||
'service': 'syslog-ng', | |||
'syslog_ng_config': '/etc/syslog-ng/syslog-ng.conf', | |||
'syslog_ng_config_src': 'salt://syslog_ng/files/syslog-ng.conf', | |||
}, | |||
'RedHat': { | |||
'package': 'syslog-ng', | |||
'service': 'syslog-ng', | |||
'syslog_ng_config': '/etc/syslog-ng/syslog-ng.conf', | |||
'syslog_ng_config_src': 'salt://syslog_ng/files/syslog-ng.conf', | |||
}, | |||
}, merge=salt['pillar.get']('syslog_ng:lookup')) %} | |||
# -*- coding: utf-8 -*- | |||
# vim: ft=jinja | |||
{% import_yaml "syslog_ng/defaults.yml" as defaults %} | |||
{% import_yaml "syslog_ng/os_family_map.yml" as os_family_map %} | |||
{% import_yaml "syslog_ng/os_codename_map.yml" as os_codename_map %} | |||
{# get the settings for the os_family grain #} | |||
{% set osfam = salt['grains.filter_by'](os_family_map) or {} %} | |||
{# get the settings for the oscodename grain, os_family data will override oscodename data #} | |||
{% set oscode = salt['grains.filter_by'](os_codename_map, grain='oscodename', merge=osfam) or {} %} | |||
{# merge the os family/os codename specific data over the defaults #} | |||
{% do defaults.syslog_ng.update(oscode) %} | |||
{# merge the pillar:lookup dict into the defaults/os specific dict #} | |||
{% set lookup = salt['pillar.get']('syslog_ng:lookup', default=defaults.syslog_ng, merge=True) %} | |||
{# merge the actual syslog_ng pillar into the above combined dict #} | |||
{% set syslog_ng = salt['pillar.get']('syslog_ng', default=lookup, merge=True) %} |
@@ -0,0 +1,35 @@ | |||
# -*- coding: utf-8 -*- | |||
# vim: ft=yaml | |||
# Debian | |||
wheezy: | |||
version: 3.3 | |||
include: | |||
- scl.conf | |||
- '`scl-root`/system/tty10.conf' | |||
last_include: | |||
- /etc/syslog-ng/conf.d/ | |||
jessie: | |||
version: 3.5 | |||
include: | |||
- scl.conf | |||
- '`scl-root`/system/tty10.conf' | |||
last_include: | |||
- /etc/syslog-ng/conf.d/*.conf | |||
stretch: | |||
version: 3.8 | |||
include: | |||
- scl.conf | |||
last_include: | |||
- /etc/syslog-ng/conf.d/*.conf | |||
# Ubuntu | |||
xenial: | |||
version: 3.5 | |||
include: | |||
- scl.conf | |||
- '`scl-root`/system/tty10.conf' | |||
last_include: | |||
- /etc/syslog-ng/conf.d/*.conf |
@@ -0,0 +1,20 @@ | |||
# -*- coding: utf-8 -*- | |||
# vim: ft=yaml | |||
Debian: | |||
package: syslog-ng | |||
service: syslog-ng | |||
syslog_ng_config: /etc/syslog-ng/syslog-ng.conf | |||
syslog_ng_config_src: salt://syslog_ng/files/syslog-ng.conf | |||
Gentoo: | |||
package: app-admin/syslog-ng | |||
service: syslog-ng | |||
syslog_ng_config: /etc/syslog-ng/syslog-ng.conf | |||
syslog_ng_config_src: salt://syslog_ng/files/syslog-ng.conf | |||
RedHat: | |||
package: syslog-ng | |||
service: syslog-ng | |||
syslog_ng_config: /etc/syslog-ng/syslog-ng.conf | |||
syslog_ng_config_src: salt://syslog_ng/files/syslog-ng.conf |
@@ -1,6 +1,5 @@ | |||
{% from "syslog_ng/map.jinja" import syslog_ng with context %} | |||
include: | |||
- syslog_ng | |||
@@ -0,0 +1,17 @@ | |||
# encoding: utf-8 | |||
title 'Test SyslogNG installation' | |||
describe package('syslog-ng') do | |||
it { should be_installed } | |||
end | |||
describe file('/etc/syslog-ng/syslog-ng.conf') do | |||
it { should exist } | |||
end | |||
describe sysv_service('syslog-ng') do | |||
it { should be_installed } | |||
it { should be_enabled } | |||
it { should be_running } | |||
end |
@@ -0,0 +1,10 @@ | |||
name: syslog_ng | |||
title: SyslogNG Profile | |||
maintainer: Nicolas Rodriguez | |||
copyright: Nicolas Rodriguez | |||
copyright_email: nicoladmin@free.fr | |||
license: MIT | |||
summary: SyslogNG Compliance Profile | |||
version: 0.1.0 | |||
supports: | |||
- os-name: debian |