63 Commits

Author SHA1 Message Date
55e366f3b2 Updating to release 0.11.0 2018-12-11 20:36:18 +01:00
925debe915 Merge pull request #74 from dj-wasabi/move-to-json-to-to_json
Renamed the tojson to to_json
2018-12-11 20:30:04 +01:00
4c9d937b18 mounting a volume 2018-12-11 20:19:29 +01:00
aed37346fb Using self created opensuse container 2018-12-11 19:31:07 +01:00
ad7ea9b04e Minor fixes to get OpenSuse working again 2018-12-11 18:41:30 +01:00
1cffd3dbc0 Renamed the tojson to to_json 2018-12-11 15:48:08 +01:00
1d03fa09ac Merge pull request #73 from jdivy/windows
A few enhancements and fixes to windows support
2018-12-09 20:21:45 +01:00
160793b0e1 A few enhancements and fixes to windows support
- Add object to template for windows perf counters with some defaults
- Fix reference to include directory
2018-12-09 12:12:30 -06:00
8e927ff480 Merge pull request #72 from Rylon/master
Replace 'ec2_facts' with 'ec2_metadata_facts' to fix a deprecation warning
2018-12-03 16:27:23 +01:00
8c61db9d28 Replace 'ec2_facts' with 'ec2_metadata_facts' to fix a deprecation warning. 2018-12-03 14:49:13 +00:00
73bcfaddf3 Merge pull request #70 from dj-wasabi/add-default-plugin
Added default pluging if nothing is configured
2018-11-26 17:56:42 +01:00
0c5d7c2de2 Merge pull request #69 from dj-wasabi/add-other-oses
Added support for (Open)Suse
2018-11-26 17:53:27 +01:00
27033a85d2 Fix merge issue 2018-11-26 17:03:37 +01:00
aea77018a1 Merge pull request #68 from dj-wasabi/add-windows
Added Windows as OS
2018-11-26 16:56:50 +01:00
c9aac33197 Added default pluging if nothing is configured 2018-11-25 20:21:52 +01:00
23963f4292 Fix idempotence issue 2018-11-25 19:39:42 +01:00
aa78fc137e Added support for (Open)Suse 2018-11-25 18:06:45 +01:00
157f02f3f8 Updating meta file so it includes Windows 2018-11-25 14:05:37 +01:00
052142e642 Added Windows as OS 2018-11-25 11:58:28 +01:00
8df7435e51 Merge pull request #67 from dj-wasabi/want-to-use-latest
Want to use latest
2018-11-23 17:42:54 +01:00
139943a832 Allow to install the latest version 2018-11-22 20:52:17 +01:00
126dbb8b22 Fix merge issues 2018-11-22 20:12:57 +01:00
85ee6f2c94 Initial working version 2018-11-22 20:12:07 +01:00
480ac75497 Merge pull request #66 from dj-wasabi/minor-improvements
Some small improvements
2018-11-22 20:10:20 +01:00
1cb38ca480 * Moved the when statements into multiple lines;
* Updated the Molecule *.yml file to newer version;
* Added a influxdb container, so telegraf will start properly on debian/ubuntu;
2018-11-21 20:25:13 +01:00
623759a56e Fix merge issue 2018-11-21 19:27:51 +01:00
54f305b80a Updating Telegraf default to 1.9.0 2018-11-21 19:26:52 +01:00
c04c94b84a Merge pull request #65 from gaelL/master
telegraf-extra-plugin.conf.j2: fix template typo
2018-11-20 16:24:45 +01:00
18f5dd81b9 telegraf-extra-plugin.conf.j2: fix template typo
Related to commend : 3cccb6ba50 (r31366694)

Fix typo added in template `telegraf-extra-plugin.conf.j2`

Also add molecule tests to validate file generated with `telegraf_plugins_extra` option.

The added test template come from `Multiple inputs of the same type` (https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#multiple-inputs-of-the-same-type)
2018-11-20 15:59:45 +01:00
09e3ee1505 Merge pull request #61 from tszym/pin-apt-key-id
Pin apt key ID
2018-11-20 07:04:37 +01:00
386cab3328 Merge pull request #62 from mprasil/master
Wen copying/removing plugins show only plugin name
2018-11-20 07:04:22 +01:00
4d9c8b4d4d Merge pull request #64 from dj-wasabi/use-base-ci
Using base ci requirements.txt
2018-11-20 07:03:29 +01:00
7e940eb0af Remove a test 2018-11-19 20:54:48 +01:00
402d69494b Make it work to pass the ci 2018-11-19 20:39:50 +01:00
79d0cdeb9f Using base ci requirements.txt 2018-11-19 20:22:41 +01:00
3cccb6ba50 Fix meta file 2018-11-19 20:20:49 +01:00
2fc672f09c Wen copying/removing plugins show only plugin name 2018-11-10 14:39:22 +00:00
f8677ca119 Pin apt key ID
ID is specified so ansible can check if the key is already there without
downloading the file. Useful to keep the role woring when the key has
already been added on systems where DL won't work with the module
because of certificate validation (Ubuntu 14.04).
2018-09-25 15:11:57 +02:00
f74ff634a7 Merge pull request #60 from gaizeror/wipe-non-ansible-extra-plugins
Added support for plugins being managed exclusively by this playbook
2018-08-20 18:46:56 +02:00
or
1cd2798566 [STYLE] added name to the task 2018-08-20 19:13:40 +03:00
or
a49e82bf12 [FIX] added a check if dir exists, else skip 2018-08-18 12:32:42 +03:00
or
fa75297915 [FIX] mode should be 740, else telegraf user doesnt have permissions to exec service and read extra plugins 2018-08-16 10:31:59 +03:00
or
2a8184490c [FIX] state is directory, not present 2018-08-16 10:11:36 +03:00
or
f74e649085 [FIX] wrong identation 2018-08-15 23:05:55 +03:00
or
5317930b21 Added telegraf_plugins_extra_exclusive to readme 2018-08-15 22:43:36 +03:00
or
5b419ffa2d [FIX] job name 2018-08-15 22:38:39 +03:00
or
323e5f8831 Added support for plugins being managed exclusively by this playbook 2018-08-15 21:13:04 +03:00
db7b456f6d Updating meta file 2018-08-12 13:53:01 +02:00
11acaaa0d8 Merge pull request #58 from dj-wasabi/update-to-0-10-0
Updating to Telegraf 1.7.3;Updating changelog
2018-08-12 13:46:08 +02:00
abb2b1bb04 Updating to Telegraf 1.7.3;Updating changelog 2018-08-12 11:13:53 +02:00
0e712c0c55 Merge pull request #55 from dj-wasabi/add_some_files
Added bunch of files
2018-05-24 19:43:05 +02:00
ee9e7428ec Added bunch of files 2018-05-24 19:36:39 +02:00
2ac6549492 Merge pull request #54 from dj-wasabi/supporting_oses
Fix Deprecation warnings
2018-05-20 08:20:22 +02:00
619b52b98a Use Ubuntu in Molecule Test;Fix deprecation warnings 2018-05-19 21:14:11 +02:00
19a4a44b58 Merge pull request #53 from tjend/remove_include_deprecation_warning
Changed 'include' to 'include_tasks' to remove deprecation warning
2018-05-11 07:49:01 +02:00
08416516bf Changed 'include' to 'include_tasks' to remove deprecation warning 2018-05-11 08:09:37 +10:00
0a37012e6e Merge pull request #52 from tjend/add_option_to_remove_plugin_extra_config
Add option to remove extra plugin config files
2018-05-10 14:56:05 +02:00
859ffb9e6e Add option to remove extra plugin config files 2018-05-10 22:11:30 +10:00
f96e6167e7 Merge pull request #50 from tjend/plugins_extra_hash_allow_multiple_inputs_same_type
Plugins extra hash allow multiple inputs same type
2018-05-09 19:28:49 +02:00
ecc24940b6 Remove option to override extra plugin filename as all dict keys must be unique 2018-05-09 11:53:57 +10:00
e93bc95cb5 Allow overriding plugin in telegraf_plugins_extra dict 2018-05-09 11:52:58 +10:00
d039a0568e Merge pull request #49 from dj-wasabi/add_requirements_file
Update to 2.4;Using specific versions of libraries
2018-05-08 20:18:01 +02:00
b015df26ae Update to 2.4;Using specific versions of libraries 2018-05-08 20:09:13 +02:00
30 changed files with 995 additions and 133 deletions

35
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,35 @@
---
name: Bug report
about: Help to improve this Ansible role.
---
**Describe the bug**
<!--- A clear and concise description of what the bug is. -->
**Installation method/version**
<!--- Please provide the installation method and version of the role. -->
* Github / latest
* Ansible Galaxy / 1.1.0
**Ansible Version**
```
<!--- Paste output from "ansible --version" -->
```
**Targetted hosts**
Concerns the following OS(es):
<!--- Pick one below and delete the rest -->
* Ubuntu
* Debian
* CentOS
* Mint
**Expected behavior**
<!--- A clear and concise description of what you expected to happen. -->
**Additional context**
<!--- Add any other context about the problem here. Configuration of the role/group_vars information etc. -->

View File

@ -0,0 +1,14 @@
---
name: Feature request
about: Suggest an idea for this Ansible role
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@ -5,7 +5,8 @@ services:
- docker
install:
- pip install molecule ansible docker==2.7.0
- curl -sSlo requirements.txt https://raw.githubusercontent.com/dj-wasabi/ansible-ci-base/master/requirements.txt
- pip install -r requirements.txt
script:
- molecule --version

View File

@ -5,6 +5,32 @@ Below an overview of all changes in the releases.
Version (Release date)
0.11.0 (2018-12-11)
* Added support for plugins being managed exclusively by this playbook #60 (By pull request: gaizeror (Thanks!))
* Pin apt key ID #61 (By pull request: tszym (Thanks!))
* Wen copying/removing plugins show only plugin name #62 (By pull request: mprasil (Thanks!))
* Using base ci requirements.txt #64
* telegraf-extra-plugin.conf.j2: fix template typo #65 (By pull request: gaelL (Thanks!))
* Some small improvements #66
* Want to use latest #67
* Added Windows as OS #68
* Added support for (Open)Suse #69
* Added default pluging if nothing is configured #70
* Replace 'ec2_facts' with 'ec2_metadata_facts' to fix a deprecation warning #72 (By pull request: Rylon (Thanks!))
* A few enhancements and fixes to windows support #73 (By pull request: jdivy (Thanks!))
* Renamed the tojson to to_json #74
0.10.0 (2018-08-12)
* Updating to telegraf 1.7.3
* Fix Deprecation warnings #54
* Changed 'include' to 'include_tasks' to remove deprecation warning #53 (By pull request: tjend (Thanks!))
* Add option to remove extra plugin config files #52 (By pull request: tjend (Thanks!))
* Plugins extra hash allow multiple inputs same type #50 (By pull request: tjend (Thanks!))
* Using specific version for tests
* Update minimum Ansible version to 2.4
0.9.0 (2018-05-06)
* plugins: be able to specify the filename of extra plugings #40 (By pull request: gaelL (Thanks!))

3
CODE_OF_CONDUCT.md Normal file
View File

@ -0,0 +1,3 @@
# Code of Conduct
The Code of Conduct from Ansible found [here](https://docs.ansible.com/ansible/devel/community/code_of_conduct.html) applies to this Ansible role as well.

88
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,88 @@
# Contributing to this role
**Table of content**
- [Contributing to this role](#contributing-to-this-role)
* [Contributing](#contributing)
* [(local) Development](#-local--development)
+ [Requirements](#requirements)
+ [Execution](#execution)
- [Other](#other)
* [Virtualenv](#virtualenv)
* [Links](#links)
Thank you very much for making time to improve this Ansible role.
## Contributing
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. [Contributor Code of Conduct](https://docs.ansible.com/ansible/devel/community/code_of_conduct.html).
1. Fork the repo
2. Create a branch and apply your changes to this branch.
a. Make sure you have updated the documentation when adding new variables;
b. Don't forget to add/update tests so we can test the functionality during each Pull Request;
c. Make sure the tests will succeed.
3. Push the branch to your fork and submit a pull request.
**Note**
Pull Requests that fails during the tests will not be merged.
## Coding Guidelines
Style guides are important because they ensure consistency in the content, look, and feel of a book or a website.
* [Ansible Style Guide](http://docs.ansible.com/ansible/latest/dev_guide/style_guide/)
* It's "Ansible" when referring to the product and ``ansible`` when referring to the command line tool, package, etc
* Playbooks should be written in multi-line YAML with ``key: value``. The form ``key=value`` is only for ``ansible`` ad-hoc, not for ``ansible-playbook``.
* Tasks should always have a ``name:``
## (local) Development
This role make use of Molecule to test the execution of the role and verificate it. In the root of the repository, a file named `requirements.txt` exists and contains the versions used by the tests.
### Requirements
You can install them with the following command:
```
pip install -r requirements.txt
```
Once the dependencies are installed, please install Docker as Molecule is configured in this repository to create Docker containers. See [this](https://docs.docker.com/install/) link to install Docker on your system.
### Execution
Once everything is installed, you can validate your changes by executing:
```
molecule test
```
It should run without any issues.
# Other
## Virtualenv
Suggestion is to create a virtualenv so you won't have issues with other projects.
Some web pages describing for virtual env:
* http://thepythonguru.com/python-virtualenv-guide/
* https://realpython.com/python-virtual-environments-a-primer/
* https://www.dabapps.com/blog/introduction-to-pip-and-virtualenv-python/
## Links
[Molecule](https://molecule.readthedocs.io/)
[Ansible](https://www.ansible.com/)
[Molecule V2 with your own role](https://werner-dijkerman.nl/2017/09/05/using-molecule-v2-to-test-ansible-roles/)
**End note**: Have fun making changes. If a feature helps you, then others find it helpful too and I will happily have it merged.

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2018 Werner Dijkerman
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

12
PULL_REQUEST_TEMPLATE.md Normal file
View File

@ -0,0 +1,12 @@
**Description of PR**
<!--- Describe what the PR holds -->
**Type of change**
<!--- Pick one below and delete the rest: -->
Feature Pull Request
Bugfix Pull Request
Docs Pull Request
**Fixes an issue**
<!--- If this PR fixes an issue, please mention it. -->

View File

@ -14,8 +14,21 @@ Design goals are to have a minimal memory footprint with a plugin system so that
## Requirements
### Operating systems
This role will work on the following operating systems:
No requirements. (Yes, an Influxdb server somewhere on the network will help though ;-) )
* Red Hat
* Debian
* Ubuntu
* Windows (Best effort)
* (Open)Suse
So, you'll need one of those operating systems.. :-)
Please sent Pull Requests or suggestions when you want to use this role for other Operating systems.
### InfluxDB
You'll need an InfluxDB instance running somewhere on your network.
## Upgrade
### 0.7.0
@ -24,13 +37,15 @@ There was an issue:
If I configure a telegraf_plugins_extra, run ansible, delete the plugin and run ansible again, the plugin stays on the machine.
## Role Variables
### Overall variables
The following parameters can be set for the Telegraf agent:
* `telegraf_agent_version`: The version of Telegraf to install. Default: `1.0.0`
* `telegraf_agent_version`: The version of Telegraf to install. Default: `1.9.0`
* `telegraf_agent_package`: The name of the Telegraf package. Default: `telegraf`
* `telegraf_agent_package_state`: If the package should be `present` or `latest`. When set to `latest`, `telegraf_agent_version` will be ignored. Default: `present`
* `telegraf_agent_interval`: The interval configured for sending data to the server. Default: `10`
* `telegraf_agent_debug`: Run Telegraf in debug mode. Default: `False`
* `telegraf_agent_round_interval`: Rounds collection interval to 'interval' Default: True
@ -70,6 +85,18 @@ The config will be printed line by line into the configuration, so you could als
and it will be printed in the configuration file.
## Windows specific Variables
**NOTE**
_Supporting Windows is an best effort (I don't have the possibility to either test/verify changes on the various amount of available Windows instances). PR's specific to Windows will almost immediately be merged, unless some one is able to provide a Windows test mechanism via Travis for Pull Requests._
* `telegraf_win_install_dir`: The directory where Telegraf will be installed.
* `telegraf_win_logfile`: The location to the logfile of Telegraf.
* `telegraf_win_include`: The directory that will contain all plugin configuration.
## Extra information
There are two properties which are similar, but are used differently. Those are:
* `telegraf_plugins_default`
@ -98,6 +125,7 @@ The 2nd parameter `telegraf_plugins_extra` can be used to add plugins specific t
config:
- servers = ["root:{{ mysql_root_password }}@tcp(localhost:3306)/"]
There is an option to delete extra-plugin files in /etc/telegraf/telegraf.d if they weren't generated by this playbook with `telegraf_plugins_extra_exclusive` variable.
Telegraf plugin options:

View File

@ -1,7 +1,10 @@
---
# defaults file for ansible-telegraf
telegraf_agent_version: 1.4.0
telegraf_agent_version: 1.9.0
telegraf_agent_version_patch: 1
telegraf_agent_package: telegraf
telegraf_agent_package_state: present
telegraf_agent_hostname: "{{ ansible_fqdn }}"
telegraf_agent_interval: 10
telegraf_agent_debug: False
@ -47,6 +50,15 @@ telegraf_plugins_default:
# extra configuration - /etc/telegraf/telegraf.d/*
telegraf_plugins_extra: {}
telegraf_plugins_extra_exclusive: False
# RedHat specific settings for convenience
telegraf_redhat_releasever: "$releasever"
telegraf_win_install_dir: 'C:\Telegraf'
telegraf_win_logfile: 'C:\\Telegraf\\telegraf.log'
telegraf_win_include: 'C:\Telegraf\telegraf_agent.d'
telegraf_win_service_args:
- -service install
- -config {{ telegraf_win_install_dir }}\telegraf\telegraf.conf
- --config-directory {{ telegraf_win_include }}

212
files/telegraf.init Normal file
View File

@ -0,0 +1,212 @@
#! /usr/bin/env bash
# chkconfig: 2345 99 01
# description: Telegraf daemon
### BEGIN INIT INFO
# Provides: telegraf
# Required-Start: $all
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start telegraf at boot time
### END INIT INFO
# this init script supports three different variations:
# 1. New lsb that define start-stop-daemon
# 2. Old lsb that don't have start-stop-daemon but define, log, pidofproc and killproc
# 3. Centos installations without lsb-core installed
#
# In the third case we have to define our own functions which are very dumb
# and expect the args to be positioned correctly.
# Command-line options that can be set in /etc/default/telegraf. These will override
# any config file values.
TELEGRAF_OPTS=
USER=telegraf
GROUP=telegraf
if [ -r /lib/lsb/init-functions ]; then
source /lib/lsb/init-functions
fi
DEFAULT=/etc/default/telegraf
if [ -r $DEFAULT ]; then
set -o allexport
source $DEFAULT
set +o allexport
fi
if [ -z "$STDOUT" ]; then
STDOUT=/dev/null
fi
if [ ! -f "$STDOUT" ]; then
mkdir -p `dirname $STDOUT`
fi
if [ -z "$STDERR" ]; then
STDERR=/var/log/telegraf/telegraf.log
fi
if [ ! -f "$STDERR" ]; then
mkdir -p `dirname $STDERR`
fi
OPEN_FILE_LIMIT=65536
function pidofproc() {
if [ $# -ne 3 ]; then
echo "Expected three arguments, e.g. $0 -p pidfile daemon-name"
fi
if [ ! -f "$2" ]; then
return 1
fi
local pidfile=`cat $2`
if [ "x$pidfile" == "x" ]; then
return 1
fi
if ps --pid "$pidfile" | grep -q $(basename $3); then
return 0
fi
return 1
}
function killproc() {
if [ $# -ne 3 ]; then
echo "Expected three arguments, e.g. $0 -p pidfile signal"
fi
pid=`cat $2`
kill -s $3 $pid
}
function log_failure_msg() {
echo "$@" "[ FAILED ]"
}
function log_success_msg() {
echo "$@" "[ OK ]"
}
# Process name ( For display )
name=telegraf
# Daemon name, where is the actual executable
daemon=/usr/bin/telegraf
# pid file for the daemon
pidfile=/var/run/telegraf/telegraf.pid
piddir=`dirname $pidfile`
if [ ! -d "$piddir" ]; then
mkdir -p $piddir
chown $USER:$GROUP $piddir
fi
# Configuration file
config=/etc/telegraf/telegraf.conf
confdir=/etc/telegraf/telegraf.d
# If the daemon is not there, then exit.
[ -x $daemon ] || exit 5
case $1 in
start)
# Checked the PID file exists and check the actual status of process
if [ -e $pidfile ]; then
pidofproc -p $pidfile $daemon > /dev/null 2>&1 && status="0" || status="$?"
# If the status is SUCCESS then don't need to start again.
if [ "x$status" = "x0" ]; then
log_failure_msg "$name process is running"
exit 0 # Exit
fi
fi
# Bump the file limits, before launching the daemon. These will carry over to
# launched processes.
ulimit -n $OPEN_FILE_LIMIT
if [ $? -ne 0 ]; then
log_failure_msg "set open file limit to $OPEN_FILE_LIMIT"
fi
log_success_msg "Starting the process" "$name"
if command -v startproc >/dev/null; then
startproc -u "$USER" -g "$GROUP" -p "$pidfile" -q -- "$daemon" -pidfile "$pidfile" -config "$config" -config-directory "$confdir" $TELEGRAF_OPTS
elif which start-stop-daemon > /dev/null 2>&1; then
start-stop-daemon --chuid $USER:$GROUP --start --quiet --pidfile $pidfile --exec $daemon -- -pidfile $pidfile -config $config -config-directory $confdir $TELEGRAF_OPTS >>$STDOUT 2>>$STDERR &
else
su -s /bin/sh -c "nohup $daemon -pidfile $pidfile -config $config -config-directory $confdir $TELEGRAF_OPTS >>$STDOUT 2>>$STDERR &" $USER
fi
log_success_msg "$name process was started"
;;
stop)
# Stop the daemon.
if [ -e $pidfile ]; then
pidofproc -p $pidfile $daemon > /dev/null 2>&1 && status="0" || status="$?"
if [ "$status" = 0 ]; then
if killproc -p $pidfile SIGTERM && /bin/rm -rf $pidfile; then
log_success_msg "$name process was stopped"
else
log_failure_msg "$name failed to stop service"
fi
fi
else
log_failure_msg "$name process is not running"
fi
;;
reload)
# Reload the daemon.
if [ -e $pidfile ]; then
pidofproc -p $pidfile $daemon > /dev/null 2>&1 && status="0" || status="$?"
if [ "$status" = 0 ]; then
if killproc -p $pidfile SIGHUP; then
log_success_msg "$name process was reloaded"
else
log_failure_msg "$name failed to reload service"
fi
fi
else
log_failure_msg "$name process is not running"
fi
;;
restart)
# Restart the daemon.
$0 stop && sleep 2 && $0 start
;;
status)
# Check the status of the process.
if [ -e $pidfile ]; then
if pidofproc -p $pidfile $daemon > /dev/null; then
log_success_msg "$name Process is running"
exit 0
else
log_failure_msg "$name Process is not running"
exit 1
fi
else
log_failure_msg "$name Process is not running"
exit 3
fi
;;
version)
$daemon version
;;
*)
# For invalid arguments, print the usage message.
echo "Usage: $0 {start|stop|restart|status|version}"
exit 2
;;
esac

View File

@ -7,3 +7,9 @@
state: restarted
enabled: yes
become: yes
- name: "Restart Windows Telegraf"
win_service:
name: Telegraf
start_mode: auto
state: restarted

View File

@ -2,9 +2,9 @@
galaxy_info:
author: Werner Dijkerman
description: Installing and configuring Telegraf
company:
license: license BSD
min_ansible_version: 1.2
company: myCompany.Dotcom
license: MIT
min_ansible_version: 2.4
platforms:
- name: EL
versions:
@ -15,6 +15,14 @@ galaxy_info:
- name: Debian
versions:
- all
categories:
- name: opensuse
versions:
- all
- name: Windows
versions:
- all
galaxy_tags:
- monitoring
dependencies: []

View File

@ -1,7 +1,14 @@
FROM {{ item.image }}
# Molecule managed
RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python python-devel python2-dnf bash && dnf clean all; \
elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \
elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; fi
{% if item.registry is defined %}
FROM {{ item.registry.url }}/{{ item.image }}
{% else %}
FROM {{ item.image }}
{% endif %}
RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \
elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \
elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \
elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi

View File

@ -2,14 +2,22 @@
- name: Create
hosts: localhost
connection: local
gather_facts: False
# no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
vars:
molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}"
molecule_ephemeral_directory: "{{ lookup('env', 'MOLECULE_EPHEMERAL_DIRECTORY') }}"
molecule_scenario_directory: "{{ lookup('env', 'MOLECULE_SCENARIO_DIRECTORY') }}"
molecule_yml: "{{ lookup('file', molecule_file) | from_yaml }}"
gather_facts: false
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
tasks:
- name: Log into a Docker registry
docker_login:
username: "{{ item.registry.credentials.username }}"
password: "{{ item.registry.credentials.password }}"
email: "{{ item.registry.credentials.email | default(omit) }}"
registry: "{{ item.registry.url }}"
docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
with_items: "{{ molecule_yml.platforms }}"
when:
- item.registry is defined
- item.registry.credentials is defined
- item.registry.credentials.username is defined
- name: Create Dockerfiles from image names
template:
src: "{{ molecule_scenario_directory }}/Dockerfile.j2"
@ -20,6 +28,7 @@
- name: Discover local Docker images
docker_image_facts:
name: "molecule_local/{{ item.item.name }}"
docker_host: "{{ item.item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
with_items: "{{ platforms.results }}"
register: docker_images
@ -27,21 +36,49 @@
docker_image:
path: "{{ molecule_ephemeral_directory }}"
name: "molecule_local/{{ item.item.image }}"
docker_host: "{{ item.item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
dockerfile: "{{ item.item.dockerfile | default(item.invocation.module_args.dest) }}"
force: "{{ item.item.force | default(True) }}"
force: "{{ item.item.force | default(true) }}"
pull: "{{ item.item.pull | default(omit) }}"
with_items: "{{ platforms.results }}"
when: platforms.changed or docker_images.results | map(attribute='images') | select('equalto', []) | list | count >= 0
- name: Create docker network(s)
docker_network:
name: "{{ item }}"
docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
state: present
with_items: "{{ molecule_yml.platforms | molecule_get_docker_networks }}"
- name: Create molecule instance(s)
docker_container:
name: "{{ item.name }}"
hostname: "{{ item.name }}"
docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
hostname: "{{ item.hostname | default(item.name) }}"
image: "molecule_local/{{ item.image }}"
state: started
recreate: False
log_driver: none
command: "{{ item.command | default('sleep infinity') }}"
recreate: false
log_driver: json-file
command: "{{ item.command | default('bash -c \"while true; do sleep 10000; done\"') }}"
privileged: "{{ item.privileged | default(omit) }}"
security_opts: "{{ item.security_opts | default(omit) }}"
volumes: "{{ item.volumes | default(omit) }}"
tmpfs: "{{ item.tmpfs | default(omit) }}"
capabilities: "{{ item.capabilities | default(omit) }}"
exposed_ports: "{{ item.exposed_ports | default(omit) }}"
published_ports: "{{ item.published_ports | default(omit) }}"
ulimits: "{{ item.ulimits | default(omit) }}"
networks: "{{ item.networks | default(omit) }}"
dns_servers: "{{ item.dns_servers | default(omit) }}"
register: server
with_items: "{{ molecule_yml.platforms }}"
async: 7200
poll: 0
- name: Wait for instance(s) creation to complete
async_status:
jid: "{{ item.ansible_job_id }}"
register: docker_jobs
until: docker_jobs.finished
retries: 300
with_items: "{{ server.results }}"

View File

@ -2,15 +2,31 @@
- name: Destroy
hosts: localhost
connection: local
gather_facts: False
gather_facts: false
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
vars:
molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}"
molecule_yml: "{{ lookup('file', molecule_file) | from_yaml }}"
tasks:
- name: Destroy molecule instance(s)
docker_container:
name: "{{ item.name }}"
docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
state: absent
force_kill: "{{ item.force_kill | default(True) }}"
force_kill: "{{ item.force_kill | default(true) }}"
register: server
with_items: "{{ molecule_yml.platforms }}"
async: 7200
poll: 0
- name: Wait for instance(s) deletion to complete
async_status:
jid: "{{ item.ansible_job_id }}"
register: docker_jobs
until: docker_jobs.finished
retries: 300
with_items: "{{ server.results }}"
- name: Delete docker network(s)
docker_network:
name: "{{ item }}"
docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}"
state: absent
with_items: "{{ molecule_yml.platforms | molecule_get_docker_networks }}"

View File

@ -9,17 +9,71 @@ lint:
config-file: molecule/default/yaml-lint.yml
platforms:
- name: influxdb
image: influxdb:1.7-alpine
command: influxd
groups:
- tsdb
networks:
- name: telegraf
environment:
INFLUXDB_DB: telegraf
- name: telegraf-centos
image: milcom/centos7-systemd
privileged: True
groups:
- telegraf
networks:
- name: telegraf
- name: telegraf-debian
image: maint/debian-systemd
image: minimum2scp/systemd-stretch
privileged: True
command: /sbin/init
groups:
- telegraf
networks:
- name: telegraf
- name: telegraf-ubuntu
image: solita/ubuntu-systemd:bionic
privileged: True
command: /sbin/init
groups:
- telegraf
networks:
- name: telegraf
- name: telegraf-opensuse
image: wdijkerman/molecule-systemd-leap
privileged: True
command: /sbin/init
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
groups:
- telegraf
networks:
- name: telegraf
provisioner:
name: ansible
lint:
name: ansible-lint
inventory:
group_vars:
all:
telegraf_agent_output:
- type: influxdb
config:
- urls = ["http://influxdb:8086"]
- database = "telegraf"
- precision = "s"
telegraf_plugins_extra:
percpu-usage:
plugin: cpu
config:
- percpu = true
- totalcpu = false
- name_override = "percpu_usage"
- fielddrop = ["cpu_time*"]
scenario:
name: default
verifier:

View File

@ -1,15 +1,4 @@
---
- hosts: all
pre_tasks:
- name: "Installing which on CentOS"
yum:
name: which
state: installed
when: ansible_distribution == 'CentOS'
- name: "Installing wget on Debian"
apt:
name: wget
state: installed
when: ansible_distribution == 'Debian'
- hosts: telegraf
roles:
- role: ansible-telegraf

View File

@ -0,0 +1,29 @@
---
- hosts: telegraf
tasks:
- name: "Installing packages on CentOS"
yum:
name: which
state: present
when:
- ansible_os_family == 'RedHat'
- name: "Installing packages on Debian"
apt:
name:
- wget
- gpg
state: present
when:
- ansible_os_family == 'Debian'
- name: "Installing packages on Suse"
zypper:
name:
- sysvinit-tools
- insserv-compat
- aaa_base
state: present
when:
- ansible_os_family == 'Suse'

View File

@ -3,13 +3,13 @@ import os
import testinfra.utils.ansible_runner
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('telegraf')
def test_telegraf_running_and_enabled(Service, SystemInfo):
telegraf = Service("telegraf")
if SystemInfo.distribution not in ['opensuse-leap']:
assert telegraf.is_enabled
if SystemInfo.distribution == 'centos':
assert telegraf.is_running
@ -18,9 +18,31 @@ def test_telegraf_dot_conf(File):
assert telegraf.user == "telegraf"
assert telegraf.group == "telegraf"
assert telegraf.mode == 0o640
assert telegraf.contains('interval = "10s"')
assert telegraf.contains('[[inputs.cpu]]')
assert telegraf.contains('percpu = true')
assert telegraf.contains('[[outputs.influxdb]]')
assert telegraf.contains('["http://influxdb:8086"]')
assert telegraf.contains('[[inputs.net]]')
def test_telegraf_package(Package, SystemInfo):
def test_telegraf_dot_d_dir(File):
telegraf = File("/etc/telegraf/telegraf.d")
assert telegraf.user == "root"
assert telegraf.group == "root"
assert telegraf.mode == 0o755
assert telegraf.is_directory
def test_telegraf_dot_d(File):
telegraf = File("/etc/telegraf/telegraf.d/percpu-usage.conf")
assert telegraf.user == "telegraf"
assert telegraf.group == "telegraf"
assert telegraf.mode == 0o640
assert telegraf.contains('[[inputs.cpu]]')
assert telegraf.contains('totalcpu = false')
def test_telegraf_package(Package):
telegraf = Package('telegraf')
assert telegraf.is_installed

View File

@ -4,6 +4,6 @@ extends: default
rules:
line-length:
max: 120
max: 140
level: warning
truthy: disable

View File

@ -1,42 +1,54 @@
---
- name: Ensure the system can use the HTTPS transport for APT.
- name: "Debian | Set name if state == latest"
set_fact:
telegraf_agent_package: telegraf={{ telegraf_agent_version }}-{{ telegraf_agent_version_patch }}
when:
- telegraf_agent_package_state != "latest"
- name: "Debian | Ensure the system can use the HTTPS transport for APT"
stat:
path: /usr/lib/apt/methods/https
register: apt_https_transport
- name: Install APT HTTPS transport.
- name: "Debian | Install APT HTTPS transport"
apt:
name: "apt-transport-https"
state: present
when: not apt_https_transport.stat.exists
when:
- not apt_https_transport.stat.exists
become: yes
- name: Download Telegraf apt key.
- name: "Debian | Download Telegraf apt key"
apt_key:
url: "https://repos.influxdata.com/influxdb.key"
id: 2582E0C5
state: present
become: yes
- name: Add Telegraf repository (using LSB).
- name: "Debian | Add Telegraf repository (using LSB)"
apt_repository:
repo: "deb https://repos.influxdata.com/{{ ansible_distribution|lower }} {{ ansible_lsb.codename }} stable"
filename: "telegraf"
state: present
become: yes
when: ansible_lsb is defined and ansible_lsb.codename is defined
when:
- ansible_lsb is defined
- ansible_lsb.codename is defined
- name: Add Telegraf repository.
- name: "Debian | Add Telegraf repository"
apt_repository:
repo: "deb https://repos.influxdata.com/{{ ansible_distribution|lower }} {{ ansible_distribution_release }} stable"
filename: "telegraf"
state: present
become: yes
when: ansible_lsb is not defined or ansible_lsb.codename is not defined
when:
- ansible_lsb is not defined or ansible_lsb.codename is not defined
- name: "Install telegraf package | Debian"
- name: "Debian | Install telegraf package"
apt:
name: "telegraf"
state: installed
name: "{{ telegraf_agent_package }}"
state: "{{ telegraf_agent_package_state }}"
force: True
notify: "Restart Telegraf"
become: yes

View File

@ -1,7 +1,13 @@
---
# description: RedHat specific installation
- name: "Add yum repository | RedHat"
- name: "RedHat | Set name if state == latest"
set_fact:
telegraf_agent_package: telegraf-{{ telegraf_agent_version }}
when:
- telegraf_agent_package_state != "latest"
- name: "RedHat | Add yum repository"
yum_repository:
name: influxdb
description: InfluxDB Repository - RHEL $releasever
@ -9,8 +15,8 @@
gpgcheck: yes
gpgkey: https://repos.influxdata.com/influxdb.key
- name: "Install telegraf package | RedHat"
- name: "RedHat | Install telegraf package"
yum:
name: "telegraf-{{ telegraf_agent_version }}"
state: installed
name: "{{ telegraf_agent_package }}"
state: "{{ telegraf_agent_package_state }}"
notify: "Restart Telegraf"

52
tasks/Suse.yml Normal file
View File

@ -0,0 +1,52 @@
---
- name: "Suse | Adding telegraf group"
group:
name: telegraf
state: present
- name: "Suse | Adding telegraf user"
user:
name: telegraf
group: telegraf
state: present
become: yes
- name: "Suse | Install repo dependencies"
zypper:
name: ["python-libxml2", "python-xml"]
update_cache: True
state: present
become: yes
- name: "Suse | Install basic repo file"
zypper_repository:
repo: "http://download.opensuse.org/repositories/devel:/languages:/go/openSUSE_Factory/"
name: The Go Programming Language (openSUSE_Factory)
state: present
runrefresh: True
auto_import_keys: True
become: yes
- name: "Suse | Install Telegraf"
zypper:
name: "{{ telegraf_agent_package }}"
state: "{{ telegraf_agent_package_state }}"
become: yes
- name: "Suse | Create directories for telegraf"
file:
path: "{{ item.path }}"
owner: "{{ item.owner }}"
state: directory
with_items:
- path: /etc/telegraf/telegraf.d/
owner: root
- path: /var/log/telegraf
owner: telegraf
- name: "Suse | Install init file"
copy:
src: telegraf.init
dest: /etc/init.d/telegraf
mode: 0755

View File

@ -1,51 +0,0 @@
---
# description: Configure telegraf and get all relevent ec2 information
- name: Retrieve ec2 facts
ec2_facts:
when: telegraf_agent_aws_tags
- name: Retrieve all ec2 tags on the instance
ec2_tag:
region: '{{ ansible_ec2_placement_region }}'
resource: '{{ ansible_ec2_instance_id }}'
state: list
when: telegraf_agent_aws_tags
register: ec2_tags
- name: "Copy the template for versions < 0.10.0"
template:
src: etc-opt-telegraf-telegraf.conf.j2
dest: /etc/opt/telegraf/telegraf.conf
owner: telegraf
group: telegraf
mode: 0640
become: yes
when: telegraf_agent_version|version_compare('0.10.0', '<')
notify: "Restart Telegraf"
- name: "Copy the template for versions >= 0.10.0"
template:
src: telegraf.conf.j2
dest: /etc/telegraf/telegraf.conf
owner: telegraf
group: telegraf
mode: 0640
become: yes
when: telegraf_agent_version|version_compare('0.10.0', '>=')
notify: "Restart Telegraf"
- name: "Copy telegraf extra plugins"
template:
src: "telegraf-extra-plugin.conf.j2"
dest: "/etc/telegraf/telegraf.d/{{ item.value.filename | default(item.key) }}.conf"
owner: telegraf
group: telegraf
mode: 0640
with_dict: "{{ telegraf_plugins_extra }}"
when: "telegraf_plugins_extra is defined and telegraf_plugins_extra is iterable"
become: yes
notify: "Restart Telegraf"
- name: "Force restart service after reread config"
meta: flush_handlers

111
tasks/configure_linux.yml Normal file
View File

@ -0,0 +1,111 @@
---
# description: Configure telegraf and get all relevent ec2 information
- name: Retrieve ec2 facts
ec2_metadata_facts:
when:
- telegraf_agent_aws_tags
- name: Retrieve all ec2 tags on the instance
ec2_tag:
region: '{{ ansible_ec2_placement_region }}'
resource: '{{ ansible_ec2_instance_id }}'
state: list
when:
- telegraf_agent_aws_tags
register: ec2_tags
- name: "Copy the template for versions < 0.10.0"
template:
src: etc-opt-telegraf-telegraf.conf.j2
dest: /etc/opt/telegraf/telegraf.conf
owner: telegraf
group: telegraf
mode: 0640
become: yes
when:
- telegraf_agent_version is version_compare('0.10.0', '<')
notify: "Restart Telegraf"
- name: "Copy the template for versions >= 0.10.0"
template:
src: telegraf.conf.j2
dest: /etc/telegraf/telegraf.conf
owner: telegraf
group: telegraf
mode: 0640
become: yes
when:
- telegraf_agent_version is version_compare('0.10.0', '>=')
notify: "Restart Telegraf"
- name: "Check if extra plugins directory exists in case of exclusive"
stat:
path: /etc/telegraf/telegraf.d
register: telegraf_directory
when:
- telegraf_plugins_extra_exclusive
- name: "Delete telegraf extra plugin path"
file:
state: absent
path: "/etc/telegraf/telegraf.d/"
when:
- telegraf_plugins_extra_exclusive
- telegraf_directory.stat.exists
become: yes
notify: "Restart Telegraf"
- name: "Create telegraf extra plugin path"
file:
state: directory
path: "/etc/telegraf/telegraf.d/"
owner: telegraf
group: telegraf
mode: 0755
when:
- telegraf_plugins_extra_exclusive
- telegraf_directory.stat.exists
become: yes
notify: "Restart Telegraf"
- name: "Copy telegraf extra plugins"
template:
src: "telegraf-extra-plugin.conf.j2"
dest: "/etc/telegraf/telegraf.d/{{ item.key }}.conf"
owner: telegraf
group: telegraf
mode: 0640
with_dict: "{{ telegraf_plugins_extra }}"
loop_control:
label: "{{ item.key }}"
when:
- telegraf_plugins_extra is defined
- telegraf_plugins_extra is iterable
- item.value.state|default('present') != 'absent'
become: yes
notify: "Restart Telegraf"
- name: "Remove telegraf extra plugins"
file:
path: "/etc/telegraf/telegraf.d/{{ item.key }}.conf"
state: absent
with_dict: "{{ telegraf_plugins_extra }}"
loop_control:
label: "{{ item.key }}"
when:
- telegraf_plugins_extra is defined
- telegraf_plugins_extra is iterable
- item.value.state|default('present') == 'absent'
become: yes
notify: "Restart Telegraf"
- name: "Force restart service after reread config"
meta: flush_handlers
- name: "Start Telegraf (If it wasn't running)"
service:
name: telegraf
state: started
enabled: yes
become: yes

View File

@ -0,0 +1,78 @@
---
- name: "Windows | Create directory structure"
win_file:
path: "{{ item }}"
state: directory
with_items:
- "{{ telegraf_win_install_dir }}"
- "{{ telegraf_win_include }}"
- name: "Windows | Check if file is already downloaded"
win_stat:
path: '{{ telegraf_win_install_dir }}\telegraf-{{ telegraf_agent_version }}_windows_amd64.zip'
register: file_info
- name: "Windows | Download Telegraf Agent Zip file"
win_get_url:
url: https://dl.influxdata.com/telegraf/releases/telegraf-{{ telegraf_agent_version }}_windows_amd64.zip
dest: '{{ telegraf_win_install_dir }}\telegraf-{{ telegraf_agent_version }}_windows_amd64.zip'
when:
- not file_info.stat.exists
- name: "Windows | Unzip file"
win_unzip:
src: '{{ telegraf_win_install_dir }}\telegraf-{{ telegraf_agent_version }}_windows_amd64.zip'
dest: "{{ telegraf_win_install_dir }}"
creates: '{{ telegraf_win_install_dir }}\telegraf\telegraf.exe'
- name: "Windows | Configure Telegraf"
win_template:
src: telegraf.conf.j2
dest: '{{ telegraf_win_install_dir }}\telegraf\telegraf.conf'
notify: "Restart Windows Telegraf"
- name: "Windows | Copy telegraf extra plugins"
win_template:
src: "telegraf-extra-plugin.conf.j2"
dest: '{{ telegraf_win_include }}\{{ item.key }}.conf'
with_dict: "{{ telegraf_plugins_extra }}"
loop_control:
label: "{{ item.key }}"
when:
- telegraf_plugins_extra is defined
- telegraf_plugins_extra is iterable
- item.value.state|default('present') != 'absent'
notify: "Restart Windows Telegraf"
- name: "Windows | Remove telegraf extra plugins"
win_file:
path: '{{ telegraf_win_include }}\{{ item.key }}.conf'
state: absent
with_dict: "{{ telegraf_plugins_extra }}"
loop_control:
label: "{{ item.key }}"
when:
- telegraf_plugins_extra is defined
- telegraf_plugins_extra is iterable
- item.value.state|default('present') == 'absent'
notify: "Restart Windows Telegraf"
- name: "Windows | Register Service"
win_command: '{{ telegraf_win_install_dir }}\telegraf\telegraf.exe {{ telegraf_win_service_args | join(" ") }}'
register: telegraf_windows_install
args:
creates: '{{ telegraf_win_install_dir }}\.installed'
- name: "Windows | Create done file so it won't register itself again"
win_file:
path: '{{ telegraf_win_install_dir }}\.installed'
state: touch
when:
- telegraf_windows_install is changed
- name: "Windows | Set service startup mode to auto and ensure it is started"
win_service:
name: Telegraf
start_mode: auto
state: started

View File

@ -1,16 +1,29 @@
---
# tasks file for ansible-telegraf
- name: "Install the correct repository"
include: "RedHat.yml"
when: ansible_os_family == "RedHat"
- name: "Install on RedHat"
include_tasks: "RedHat.yml"
when:
- ansible_os_family == "RedHat"
- name: "Install the correct repository"
include: "Debian.yml"
when: ansible_os_family == "Debian"
- name: "Install on Debian"
include_tasks: "Debian.yml"
when:
- ansible_os_family == "Debian"
tags:
- telegraf
- packages
- name: "Install on Suse"
include_tasks: "Suse.yml"
when: ansible_os_family == "Suse"
- name: "Configure telegraf"
include: "configure.yml"
include_tasks: "configure_linux.yml"
when:
- ansible_os_family != "Windows"
- name: "Install / Configure telegraf on Windows"
include_tasks: "configure_windows.yml"
when:
- ansible_os_family == "Windows"

View File

@ -1,6 +1,6 @@
### MANAGED BY {{ role_path|basename }} ANSIBLE ROLE ###
[[inputs.{{ item.key }}]]
[[inputs.{{ item.value.plugin | default(item.key) }}]]
{% if item.value.interval is defined %}
interval = "{{ item.value.interval }}s"
{% endif %}
@ -10,37 +10,37 @@
{% endfor %}
{% endif %}
{% if item.value.tags is defined and item.value.tags is iterable %}
[inputs.{{ item.key }}.tags]
[inputs.{{ item.value.plugin | default(item.key) }}.tags]
{% for items in item.value.tags %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.value.tagpass is defined and item.value.tagpass is iterable %}
[{{ item.key }}.tagpass]
[{{ item.value.plugin | default(item.key) }}.tagpass]
{% for items in item.value.tagpass %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.value.tagdrop is defined and item.value.tagdrop is iterable %}
[{{ item.key }}.tagdrop]
[{{ item.value.plugin | default(item.key) }}.tagdrop]
{% for items in item.value.tagdrop %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.value.pass is defined and item.value.pass is iterable %}
[{{ item.key }}.pass]
[{{ item.value.plugin | default(item.key) }}.pass]
{% for items in item.value.pass %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.value.drop is defined and item.value.drop is iterable %}
[{{ item.key }}.drop]
[{{ item.value.plugin | default(item.key) }}.drop]
{% for items in item.value.drop %}
{{ items }}
{% endfor %}
{% endif %}
{% if item.value.specifications is defined and item.value.specifications is iterable %}
[[{{item.key}}.specifications]]
[[{{item.value.plugin | default(item.key)}}.specifications]]
{% for items in item.value.specifications %}
{{ items }}
{% endfor %}

View File

@ -21,14 +21,18 @@
round_interval = {{ telegraf_agent_round_interval | lower }}
flush_interval = "{{ telegraf_agent_flush_interval }}s"
flush_jitter = "{{ telegraf_agent_flush_jitter }}s"
{% if telegraf_agent_version|version_compare('0.13', '>=') %}
{% if telegraf_agent_version is version_compare('0.13', '>=') %}
collection_jitter = "{{ telegraf_agent_collection_jitter }}s"
metric_batch_size = {{ telegraf_agent_metric_batch_size }}
metric_buffer_limit = {{ telegraf_agent_metric_buffer_limit }}
quiet = {{ telegraf_agent_quiet | lower }}
{% endif %}
{% if telegraf_agent_version|version_compare('1.1', '>=') %}
{% if telegraf_agent_version is version_compare('1.1', '>=') %}
{% if ansible_os_family == "Windows" %}
logfile = "{{ telegraf_win_logfile }}"
{% else %}
logfile = "{{ telegraf_agent_logfile }}"
{% endif %}
omit_hostname = {{ telegraf_agent_omit_hostname | lower }}
{% endif %}
@ -90,6 +94,16 @@
{{ items }}
{% endfor %}
{% endif %}
{% if item.objects is defined and item.objects is iterable %}
{% for object in item.objects %}
[[inputs.{{ item.plugin }}.object]]
ObjectName = {{ object.name | to_json }}
Instances = {{ object.instances | default(["*"]) }}
Counters = {{ object.counters | default(["*"]) }}
Measurement = {{ object.measurement | default("win_perf_counters") | to_json }}
IncludeTotal = {{ object.total | default(false) | string | lower }}
{% endfor %}
{% endif %}
{% if item.specifications is defined and item.specifications is iterable %}
[[{{item.plugin}}.specifications]]
{% for items in item.specifications %}
@ -98,3 +112,10 @@
{% endif %}
{% endfor %}
{% endif %}
{% if telegraf_plugins_default is defined and telegraf_plugins_default|length == 0 %}
{% if telegraf_plugins_extra is defined and telegraf_plugins_extra.keys() | length == 0 %}
# No plugins configured, added a mem plugin so telegraf doesn't stop working.
[[inputs.mem]]
{% endif %}
{% endif %}