mirror of
https://github.com/dj-wasabi/ansible-telegraf.git
synced 2025-07-17 08:46:37 +00:00
Compare commits
157 Commits
Author | SHA1 | Date | |
---|---|---|---|
55e366f3b2 | |||
925debe915 | |||
4c9d937b18 | |||
aed37346fb | |||
ad7ea9b04e | |||
1cffd3dbc0 | |||
1d03fa09ac | |||
160793b0e1 | |||
8e927ff480 | |||
8c61db9d28 | |||
73bcfaddf3 | |||
0c5d7c2de2 | |||
27033a85d2 | |||
aea77018a1 | |||
c9aac33197 | |||
23963f4292 | |||
aa78fc137e | |||
157f02f3f8 | |||
052142e642 | |||
8df7435e51 | |||
139943a832 | |||
126dbb8b22 | |||
85ee6f2c94 | |||
480ac75497 | |||
1cb38ca480 | |||
623759a56e | |||
54f305b80a | |||
c04c94b84a | |||
18f5dd81b9 | |||
09e3ee1505 | |||
386cab3328 | |||
4d9c8b4d4d | |||
7e940eb0af | |||
402d69494b | |||
79d0cdeb9f | |||
3cccb6ba50 | |||
2fc672f09c | |||
f8677ca119 | |||
f74ff634a7 | |||
1cd2798566 | |||
a49e82bf12 | |||
fa75297915 | |||
2a8184490c | |||
f74e649085 | |||
5317930b21 | |||
5b419ffa2d | |||
323e5f8831 | |||
db7b456f6d | |||
11acaaa0d8 | |||
abb2b1bb04 | |||
0e712c0c55 | |||
ee9e7428ec | |||
2ac6549492 | |||
619b52b98a | |||
19a4a44b58 | |||
08416516bf | |||
0a37012e6e | |||
859ffb9e6e | |||
f96e6167e7 | |||
ecc24940b6 | |||
e93bc95cb5 | |||
d039a0568e | |||
b015df26ae | |||
3df05b4738 | |||
4fcb2ac9d2 | |||
8f5cc0959d | |||
51ac4b7640 | |||
2f3b11241d | |||
d0258da789 | |||
a49a079664 | |||
af96592932 | |||
875b1a5ee8 | |||
aafd65f4b1 | |||
6d04f839e0 | |||
2c896aa512 | |||
e6d715e81a | |||
316772ba64 | |||
1d413000a4 | |||
63249b4fba | |||
c1758eaa74 | |||
0f001e68c2 | |||
57f5395c7d | |||
eb986ae494 | |||
cc40194a65 | |||
06a63e3580 | |||
5829b6bc02 | |||
bd62e6316e | |||
b86a9f29a3 | |||
b2a1652c47 | |||
2bee19f8a1 | |||
87e6e95c72 | |||
4fb8da24af | |||
b4317d8e5d | |||
7766329cb8 | |||
1e57d51575 | |||
163284ab36 | |||
a08dee2562 | |||
9e0be2c3d2 | |||
82ca1ef61d | |||
4f8fa12fad | |||
1100ceddd6 | |||
40b25772f3 | |||
71f436f8ca | |||
c416bb20a7 | |||
ae8c1cbe7f | |||
c6848506cf | |||
0b82b8420e | |||
f7e7045e9f | |||
35b594cf36 | |||
128faa55b6 | |||
641981bfb3 | |||
e29aa87c04 | |||
227c6f9418 | |||
cb215db02c | |||
0597f0115c | |||
62a6158281 | |||
fe9f970bde | |||
2696c2aca5 | |||
f3f67f4f7a | |||
8b522beab0 | |||
4291b00a6e | |||
7694682e56 | |||
8fd9c2c9c9 | |||
4c0d09d11e | |||
9aad1a8d39 | |||
2c54dea8d2 | |||
f962f4ca82 | |||
194d3d6e92 | |||
5036595b79 | |||
3bd9681567 | |||
536dce400b | |||
0405d3d993 | |||
1533214071 | |||
26b473b0fb | |||
d486975c81 | |||
3201ec329c | |||
b95a67954f | |||
ad1a4430c6 | |||
ec63b2aa24 | |||
8dbb365ed0 | |||
f23fc6ea23 | |||
51c82e1c85 | |||
a3ca2db212 | |||
9c9dc33ac3 | |||
95d5161d33 | |||
86fabca61b | |||
b0dfe773a7 | |||
3826a37496 | |||
4d197aa8ea | |||
40230aa198 | |||
7512939626 | |||
e4ac118212 | |||
6e990c9a03 | |||
01d05b0a88 | |||
cf37fb1d2e | |||
4bd9a85f94 | |||
fe287f5d7c |
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal 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. -->
|
14
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
14
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal 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.
|
9
.gitignore
vendored
9
.gitignore
vendored
@ -1,4 +1,7 @@
|
||||
.kitchen/
|
||||
.kitchen.local.yml
|
||||
.idea/
|
||||
.idea
|
||||
.molecule
|
||||
tests/.cache
|
||||
.cache
|
||||
__pycache__
|
||||
*.retry
|
||||
pmip
|
||||
|
22
.kitchen.yml
22
.kitchen.yml
@ -1,22 +0,0 @@
|
||||
---
|
||||
driver:
|
||||
name: docker
|
||||
provision_command: sed -i '/tsflags=nodocs/d' /etc/yum.conf
|
||||
|
||||
provisioner:
|
||||
name: ansible_playbook
|
||||
ansible_yum_repo: "http://mirror.logol.ru/epel/6/x86_64/epel-release-6-8.noarch.rpm"
|
||||
hosts: localhost
|
||||
require_chef_for_busser: false
|
||||
require_ruby_for_busser: true
|
||||
|
||||
platforms:
|
||||
- name: centos-6.7
|
||||
|
||||
verifier:
|
||||
ruby_bindir: '/usr/bin'
|
||||
|
||||
suites:
|
||||
- name: default
|
||||
run_list:
|
||||
attributes:
|
19
.travis.yml
19
.travis.yml
@ -1,15 +1,16 @@
|
||||
---
|
||||
sudo: required
|
||||
language: python
|
||||
python: "2.7"
|
||||
before_install:
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install -qq python-apt python-pycurl
|
||||
services:
|
||||
- docker
|
||||
|
||||
install:
|
||||
- pip install ansible==1.9.4
|
||||
- echo -e 'localhost ansible_connection=local' > test/inventory
|
||||
- echo -e '[defaults]\nroles_path = ../\nhostfile = ./test/inventory' > ansible.cfg
|
||||
- curl -sSlo requirements.txt https://raw.githubusercontent.com/dj-wasabi/ansible-ci-base/master/requirements.txt
|
||||
- pip install -r requirements.txt
|
||||
|
||||
script:
|
||||
- ansible-playbook test/integration/default.yml --syntax-check
|
||||
- ansible-playbook test/integration/default.yml --connection=local --sudo
|
||||
- molecule --version
|
||||
- ansible --version
|
||||
- molecule test
|
||||
notifications:
|
||||
webhooks: https://galaxy.ansible.com/api/v1/notifications/
|
||||
|
76
CHANGELOG.md
76
CHANGELOG.md
@ -5,6 +5,82 @@ 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!))
|
||||
* Fix markdown #41 (By pull request: Angristan (Thanks!))
|
||||
* Allow to override RedHat release version #43 (By pull request: tszym (Thanks!))
|
||||
* Improved comments, split up role, moved tags and added defaults #45 (By pull request: boxrick (Thanks!))
|
||||
* Fix Travis Tests #42
|
||||
* Convert the telegraf_plugins_extra varaible to a hash so that we can … #46 (By pull request: tjend (Thanks!))
|
||||
|
||||
0.8.0 (2017-10-30)
|
||||
|
||||
* Updating to Molecule V2
|
||||
* Test if LSB codename exists before using it #35 (By pull request: tszym (Thanks!))
|
||||
* Remove useless packages on RedHat. fix #28 #36 (By pull request: tszym (Thanks!))
|
||||
* Fix extra plugins by file / Change apt source filename / Change tags by global_tags #37 (By pull request: aarnaud (Thanks!))
|
||||
* Use telegra_global_tags for oldest telegraf versions #38 (By pull request: tszym (Thanks!))
|
||||
|
||||
0.7.0 (2017-02-23)
|
||||
|
||||
* Replace action by modules #26 (By pull request: tszym (Thanks!))
|
||||
* Use yum repository to install telegraf on RedHat #25 (By pull request: tszym (Thanks!))
|
||||
* Remove for-loop in extra-plugin template #24 (By pull request: emersondispatch (Thanks!))
|
||||
* Update Debian.yml #23 (By pull request: zend0 (Thanks!))
|
||||
* extra plugins tags #21 (By pull request: oboukili (Thanks!))
|
||||
* Input tags support #20 (By pull request: szibis (Thanks!))
|
||||
* Fix telegraf confguration permissions #19 (By pull request: szibis (Thanks!))
|
||||
|
||||
0.6.0 (2017-01-02)
|
||||
|
||||
* Fix the Influxdb repo for "hybrid" debian distros (like "jessie/sid") #9 (By pull request: Ismael (Thanks!))
|
||||
* Do "become" for the steps that require root access on Debian #10 (By pull request: Ismael (Thanks!))
|
||||
* Fix the Influxdb repo for "hybrid" debian distros (like "jessie/sid") #11 (By pull request: Ismael (Thanks!))
|
||||
* Removed imports #12
|
||||
* Fixing molecule #15
|
||||
* set telegraf hostname in defaults. #13 (By pull request: romainbureau (Thanks!))
|
||||
* use version_compare filter … #14 (By pull request: lhoss (Thanks!))
|
||||
* support missing agent settings upto telegraf v1.1 #16 (By pull request: lhoss (Thanks!))
|
||||
* update the README with the latest v0.13 - v1.1 agent settings #17 (By pull request: lhoss (Thanks!))
|
||||
|
||||
0.5.1 (2016-08-24)
|
||||
|
||||
* fixed issue with ansible not getting the package #6 (By pull request: thecodeassassin (Thanks!))
|
||||
|
||||
0.5.0 (2016-07-17)
|
||||
|
||||
* Removed Test Kitchen tests
|
||||
* Added Molecule tests and travis make use of them
|
||||
* Updated default version to 1.0.0 beta2
|
||||
* Feature/add extra plugins to telegrafd folder #5 (By pull request: stvnwrgs (Thanks!))
|
||||
|
||||
0.4.0 (2016-02-05)
|
||||
|
||||
* Fixed test for test-kitchen
|
||||
|
3
CODE_OF_CONDUCT.md
Normal file
3
CODE_OF_CONDUCT.md
Normal 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
88
CONTRIBUTING.md
Normal 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.
|
5
Gemfile
5
Gemfile
@ -1,5 +0,0 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "test-kitchen"
|
||||
gem "kitchen-docker"
|
||||
gem "kitchen-ansible"
|
41
Gemfile.lock
41
Gemfile.lock
@ -1,41 +0,0 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
faraday (0.9.2)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
highline (1.7.8)
|
||||
kitchen-ansible (0.0.30)
|
||||
librarian-ansible
|
||||
test-kitchen
|
||||
kitchen-docker (2.3.0)
|
||||
test-kitchen (>= 1.0.0)
|
||||
librarian (0.1.2)
|
||||
highline
|
||||
thor (~> 0.15)
|
||||
librarian-ansible (1.0.6)
|
||||
faraday
|
||||
librarian (~> 0.1.0)
|
||||
mixlib-shellout (2.2.3)
|
||||
multipart-post (2.0.0)
|
||||
net-scp (1.2.1)
|
||||
net-ssh (>= 2.6.5)
|
||||
net-ssh (2.9.2)
|
||||
safe_yaml (1.0.4)
|
||||
test-kitchen (1.4.2)
|
||||
mixlib-shellout (>= 1.2, < 3.0)
|
||||
net-scp (~> 1.1)
|
||||
net-ssh (~> 2.7, < 2.10)
|
||||
safe_yaml (~> 1.0)
|
||||
thor (~> 0.18)
|
||||
thor (0.19.1)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
kitchen-ansible
|
||||
kitchen-docker
|
||||
test-kitchen
|
||||
|
||||
BUNDLED WITH
|
||||
1.10.6
|
21
LICENSE
Normal file
21
LICENSE
Normal 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
12
PULL_REQUEST_TEMPLATE.md
Normal 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. -->
|
119
README.md
119
README.md
@ -1,7 +1,6 @@
|
||||
dj-wasabi.telegraf
|
||||
=========
|
||||
# dj-wasabi.telegraf
|
||||
|
||||
Build status:
|
||||
## Build status:
|
||||
|
||||
[](https://travis-ci.org/dj-wasabi/ansible-telegraf)
|
||||
|
||||
@ -13,26 +12,59 @@ Design goals are to have a minimal memory footprint with a plugin system so that
|
||||
|
||||
(https://github.com/influxdb/telegraf)
|
||||
|
||||
Requirements
|
||||
------------
|
||||
## Requirements
|
||||
|
||||
No requirements. (Yes, an Influxdb server somewhere on the network will help though ;-) )
|
||||
### Operating systems
|
||||
This role will work on the following operating systems:
|
||||
|
||||
Role Variables
|
||||
--------------
|
||||
* 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
|
||||
|
||||
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: `0.10.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`: Setting the Telegraf in debug mode. Default: `False`
|
||||
* `telegraf_agent_debug`: Run Telegraf in debug mode. Default: `False`
|
||||
* `telegraf_agent_round_interval`: Rounds collection interval to 'interval' Default: True
|
||||
* `telegraf_agent_flush_interval`: Default data flushing interval for all outputs. Default: 10
|
||||
* `telegraf_agent_flush_jitter`: Jitter the flush interval by a random amount. Default: 0
|
||||
* `telegraf_agent_aws_tags`: Configure AWS ec2 tags into Telegraf tags section Default: `False`
|
||||
* `telegraf_agent_aws_tags_prefix`: Define a prefix for AWS ec2 tags. Default: `""`
|
||||
* `telegraf_agent_collection_jitter`: Jitter the collection by a random amount. Default: 0 (since v0.13)
|
||||
* `telegraf_agent_metric_batch_size`: The agent metric batch size. Default: 1000 (since v0.13)
|
||||
* `telegraf_agent_metric_buffer_limit`: The agent metric buffer limit. Default: 10000 (since v0.13)
|
||||
* `telegraf_agent_quiet`: Run Telegraf in quiet mode (error messages only). Default: `False` (since v0.13)
|
||||
* `telegraf_agent_logfile`: The agent logfile name. Default: '' (means to log to stdout) (since v1.1)
|
||||
* `telegraf_agent_omit_hostname`: Do no set the "host" tag in the agent. Default: `False` (since v1.1)
|
||||
|
||||
Full agent settings reference: https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#agent-configuration
|
||||
|
||||
You can set tags for the host running telegraf:
|
||||
|
||||
telegraf_agent_tags:
|
||||
telegraf_global_tags:
|
||||
- tag_name: some_name
|
||||
tag_value: some_value
|
||||
|
||||
@ -43,6 +75,8 @@ Specifying an output. The default is set to localhost, you'll have to specify th
|
||||
config:
|
||||
- urls = ["http://localhost:8086"]
|
||||
- database = "telegraf"
|
||||
tagpass:
|
||||
- diskmetrics = ["true"]
|
||||
|
||||
The config will be printed line by line into the configuration, so you could also use:
|
||||
|
||||
@ -51,7 +85,19 @@ The config will be printed line by line into the configuration, so you could als
|
||||
|
||||
and it will be printed in the configuration file.
|
||||
|
||||
There are two properties which are the same, but are used differently. Those are:
|
||||
## 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`
|
||||
* `telegraf_plugins_extra`
|
||||
@ -69,19 +115,21 @@ With the property `telegraf_plugins_default` it is set to use the default set of
|
||||
- plugin: swap
|
||||
- plugin: netstat
|
||||
|
||||
Every telegraf agent has these as an default configuration.
|
||||
Every telegraf agent has these as a default configuration.
|
||||
|
||||
The 2nd parameter `telegraf_plugins_extra` can be used to add plugins specific to the servers goal. Following is an example for using this parameter for MySQL database servers:
|
||||
The 2nd parameter `telegraf_plugins_extra` can be used to add plugins specific to the servers goal. It is a hash instead of a list, so that you can merge values from multiple var files together. Following is an example for using this parameter for MySQL database servers:
|
||||
|
||||
cat group_vars/mysql_database
|
||||
telegraf_plugins_extra:
|
||||
- plugin: mysql
|
||||
mysql:
|
||||
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:
|
||||
|
||||
* `tags` An k/v tags to apply to a specific input's measurements. Can be used on any stage for better filtering for example in outputs.
|
||||
* `pass`: An array of strings that is used to filter metrics generated by the current plugin. Each string in the array is tested as a prefix against metric names and if it matches, the metric is emitted.
|
||||
* `drop`: The inverse of pass, if a metric name matches, it is not emitted.
|
||||
* `tagpass`: (added in Telegraf 0.1.5) tag names and arrays of strings that are used to filter metrics by the current plugin. Each string in the array is tested as an exact match against the tag name, and if it matches the metric is emitted.
|
||||
@ -93,41 +141,56 @@ An example might look like this:
|
||||
telegraf_plugins_default:
|
||||
- plugin: disk
|
||||
interval: 12
|
||||
tags:
|
||||
- diskmetrics = "true"
|
||||
tagpass:
|
||||
- fstype = [ "ext4", "xfs" ]
|
||||
- path = [ "/opt", "/home" ]
|
||||
|
||||
|
||||
|
||||
Dependencies
|
||||
------------
|
||||
## Dependencies
|
||||
|
||||
No dependencies
|
||||
|
||||
Example Playbook
|
||||
----------------
|
||||
## Example Playbook
|
||||
|
||||
- hosts: servers
|
||||
roles:
|
||||
- { role: dj-wasabi.telegraf }
|
||||
|
||||
##Contributors
|
||||
## Contributors
|
||||
|
||||
The following have contributed to this Ansible role:
|
||||
|
||||
* aferrari-technisys
|
||||
* Thomas Szymanski
|
||||
* Alejandro
|
||||
* Slawomir Skowron
|
||||
* Ismael
|
||||
* Laurent Hoss
|
||||
* Anthony ARNAUD
|
||||
* Rick Box
|
||||
* Emerson Knapp
|
||||
* gaelL
|
||||
* Steven Wirges
|
||||
* zend0
|
||||
* Angristan
|
||||
* Olivier Boukili
|
||||
* Romain BUREAU
|
||||
* TheCodeAssassin
|
||||
* tjend
|
||||
|
||||
Thank you all!
|
||||
|
||||
Test Kitchen
|
||||
------------
|
||||
## Molecule
|
||||
|
||||
This roles is configured to be tested with Test Kitchen. You can find on this page some more information regarding Test Kitchen: http://werner-dijkerman.nl/2015/08/20/using-test-kitchen-with-docker-and-serverspec-to-test-ansible-roles/
|
||||
This roles is configured to be tested with Molecule. You can find on this page some more information regarding Molecule: https://werner-dijkerman.nl/2016/07/10/testing-ansible-roles-with-molecule-testinfra-and-docker/
|
||||
|
||||
License
|
||||
-------
|
||||
## License
|
||||
|
||||
BSD
|
||||
|
||||
Author Information
|
||||
------------------
|
||||
## Author Information
|
||||
|
||||
Please let me know if you have issues. Pull requests are also accepted! :-)
|
||||
|
||||
|
@ -1,14 +1,30 @@
|
||||
---
|
||||
# defaults file for ansible-telegraf
|
||||
|
||||
telegraf_agent_version: 0.10.1
|
||||
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
|
||||
telegraf_agent_round_interval: True
|
||||
telegraf_agent_flush_interval: 10
|
||||
telegraf_agent_flush_jitter: 0
|
||||
telegraf_agent_aws_tags: False
|
||||
telegraf_agent_aws_tags_prefix: ""
|
||||
|
||||
telegraf_agent_tags:
|
||||
# v0.13 settings (not sure if supported in older version):
|
||||
telegraf_agent_collection_jitter: 0
|
||||
telegraf_agent_metric_batch_size: 1000
|
||||
telegraf_agent_metric_buffer_limit: 10000
|
||||
telegraf_agent_quiet: False
|
||||
|
||||
# v1.1 settings:
|
||||
telegraf_agent_logfile: ""
|
||||
telegraf_agent_omit_hostname: False
|
||||
|
||||
telegraf_global_tags: []
|
||||
|
||||
telegraf_agent_output:
|
||||
- type: influxdb
|
||||
@ -17,6 +33,7 @@ telegraf_agent_output:
|
||||
- database = "telegraf"
|
||||
- precision = "s"
|
||||
|
||||
# defaults - /etc/telegraf/telegraf.conf
|
||||
telegraf_plugins_default:
|
||||
- plugin: cpu
|
||||
config:
|
||||
@ -28,5 +45,20 @@ telegraf_plugins_default:
|
||||
- plugin: system
|
||||
- plugin: swap
|
||||
- plugin: netstat
|
||||
- plugin: processes
|
||||
- plugin: kernel
|
||||
|
||||
telegraf_plugins_extra:
|
||||
# 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
212
files/telegraf.init
Normal 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
|
@ -2,8 +2,14 @@
|
||||
# handlers file for ansible-telegraf
|
||||
|
||||
- name: "Restart Telegraf"
|
||||
action: service
|
||||
name=telegraf
|
||||
state=restarted
|
||||
enabled=yes
|
||||
sudo: yes
|
||||
service:
|
||||
name: telegraf
|
||||
state: restarted
|
||||
enabled: yes
|
||||
become: yes
|
||||
|
||||
- name: "Restart Windows Telegraf"
|
||||
win_service:
|
||||
name: Telegraf
|
||||
start_mode: auto
|
||||
state: restarted
|
||||
|
@ -2,19 +2,27 @@
|
||||
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:
|
||||
- all
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- all
|
||||
- name: Debian
|
||||
versions:
|
||||
- all
|
||||
categories:
|
||||
- monitoring
|
||||
- name: EL
|
||||
versions:
|
||||
- all
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- all
|
||||
- name: Debian
|
||||
versions:
|
||||
- all
|
||||
- name: opensuse
|
||||
versions:
|
||||
- all
|
||||
- name: Windows
|
||||
versions:
|
||||
- all
|
||||
|
||||
galaxy_tags:
|
||||
- monitoring
|
||||
|
||||
dependencies: []
|
14
molecule/default/Dockerfile.j2
Normal file
14
molecule/default/Dockerfile.j2
Normal file
@ -0,0 +1,14 @@
|
||||
# Molecule managed
|
||||
|
||||
{% 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
|
46
molecule/default/INSTALL.rst
Normal file
46
molecule/default/INSTALL.rst
Normal file
@ -0,0 +1,46 @@
|
||||
*******
|
||||
Install
|
||||
*******
|
||||
|
||||
This set of playbooks have specific dependencies on Ansible due to the modules
|
||||
being used.
|
||||
|
||||
Requirements
|
||||
============
|
||||
|
||||
* Ansible 2.2
|
||||
* Docker Engine
|
||||
* docker-py
|
||||
|
||||
Install OS dependencies on CentOS 7
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo yum install -y epel-release
|
||||
$ sudo yum install -y gcc python-pip python-devel openssl-devel
|
||||
# If installing Molecule from source.
|
||||
$ sudo yum install libffi-devel git
|
||||
|
||||
Install OS dependencies on Ubuntu 16.x
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo apt-get update
|
||||
$ sudo apt-get install -y python-pip libssl-dev docker-engine
|
||||
# If installing Molecule from source.
|
||||
$ sudo apt-get install -y libffi-dev git
|
||||
|
||||
Install OS dependencies on Mac OS
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ brew install python
|
||||
$ brew install git
|
||||
|
||||
Install using pip:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo pip install ansible
|
||||
$ sudo pip install docker-py
|
||||
$ sudo pip install molecule --pre
|
84
molecule/default/create.yml
Normal file
84
molecule/default/create.yml
Normal file
@ -0,0 +1,84 @@
|
||||
---
|
||||
- name: Create
|
||||
hosts: localhost
|
||||
connection: local
|
||||
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"
|
||||
dest: "{{ molecule_ephemeral_directory }}/Dockerfile_{{ item.image | regex_replace('[^a-zA-Z0-9_]', '_') }}"
|
||||
with_items: "{{ molecule_yml.platforms }}"
|
||||
register: platforms
|
||||
|
||||
- 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
|
||||
|
||||
- name: Build an Ansible compatible image
|
||||
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) }}"
|
||||
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 }}"
|
||||
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: 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 }}"
|
32
molecule/default/destroy.yml
Normal file
32
molecule/default/destroy.yml
Normal file
@ -0,0 +1,32 @@
|
||||
---
|
||||
- name: Destroy
|
||||
hosts: localhost
|
||||
connection: local
|
||||
gather_facts: false
|
||||
no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
|
||||
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) }}"
|
||||
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 }}"
|
82
molecule/default/molecule.yml
Normal file
82
molecule/default/molecule.yml
Normal file
@ -0,0 +1,82 @@
|
||||
---
|
||||
dependency:
|
||||
name: galaxy
|
||||
driver:
|
||||
name: docker
|
||||
lint:
|
||||
name: yamllint
|
||||
options:
|
||||
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: 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:
|
||||
name: testinfra
|
||||
lint:
|
||||
name: flake8
|
@ -1,4 +1,4 @@
|
||||
---
|
||||
- hosts: localhost
|
||||
- hosts: telegraf
|
||||
roles:
|
||||
- role: ansible-telegraf
|
29
molecule/default/prepare.yml
Normal file
29
molecule/default/prepare.yml
Normal 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'
|
48
molecule/default/tests/test_default.py
Normal file
48
molecule/default/tests/test_default.py
Normal file
@ -0,0 +1,48 @@
|
||||
import os
|
||||
|
||||
import testinfra.utils.ansible_runner
|
||||
|
||||
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
|
||||
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
|
||||
assert telegraf.is_running
|
||||
|
||||
|
||||
def test_telegraf_dot_conf(File):
|
||||
telegraf = File("/etc/telegraf/telegraf.conf")
|
||||
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_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
|
BIN
molecule/default/tests/test_default.pyc
Normal file
BIN
molecule/default/tests/test_default.pyc
Normal file
Binary file not shown.
9
molecule/default/yaml-lint.yml
Normal file
9
molecule/default/yaml-lint.yml
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
|
||||
extends: default
|
||||
|
||||
rules:
|
||||
line-length:
|
||||
max: 140
|
||||
level: warning
|
||||
truthy: disable
|
@ -1,14 +1,54 @@
|
||||
---
|
||||
|
||||
- name: "Fetch telegraf installation package | Debian"
|
||||
action: get_url
|
||||
url=http://get.influxdb.org/telegraf/telegraf_{{ telegraf_agent_version }}-1_amd64.deb
|
||||
dest=/tmp/telegraf_{{ telegraf_agent_version }}-1_amd64.deb
|
||||
mode=0440
|
||||
- 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: "Install telegraf package | Debian"
|
||||
action: apt
|
||||
deb=/tmp/telegraf_{{ telegraf_agent_version }}-1_amd64.deb
|
||||
state=installed
|
||||
- name: "Debian | Ensure the system can use the HTTPS transport for APT"
|
||||
stat:
|
||||
path: /usr/lib/apt/methods/https
|
||||
register: apt_https_transport
|
||||
|
||||
- name: "Debian | Install APT HTTPS transport"
|
||||
apt:
|
||||
name: "apt-transport-https"
|
||||
state: present
|
||||
when:
|
||||
- not apt_https_transport.stat.exists
|
||||
become: yes
|
||||
|
||||
- name: "Debian | Download Telegraf apt key"
|
||||
apt_key:
|
||||
url: "https://repos.influxdata.com/influxdb.key"
|
||||
id: 2582E0C5
|
||||
state: present
|
||||
become: yes
|
||||
|
||||
- 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
|
||||
- ansible_lsb.codename is defined
|
||||
|
||||
- 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
|
||||
|
||||
- name: "Debian | Install telegraf package"
|
||||
apt:
|
||||
name: "{{ telegraf_agent_package }}"
|
||||
state: "{{ telegraf_agent_package_state }}"
|
||||
force: True
|
||||
notify: "Restart Telegraf"
|
||||
sudo: yes
|
||||
become: yes
|
||||
|
@ -1,14 +1,22 @@
|
||||
---
|
||||
# description: RedHat specific installation
|
||||
|
||||
- name: "Fetch telegraf installation package | RedHat"
|
||||
action: get_url
|
||||
url=http://get.influxdb.org/telegraf/telegraf-{{ telegraf_agent_version }}-1.x86_64.rpm
|
||||
dest=/tmp/telegraf_{{ telegraf_agent_version }}-1.x86_64.rpm
|
||||
mode=0440
|
||||
- name: "RedHat | Set name if state == latest"
|
||||
set_fact:
|
||||
telegraf_agent_package: telegraf-{{ telegraf_agent_version }}
|
||||
when:
|
||||
- telegraf_agent_package_state != "latest"
|
||||
|
||||
- name: "Install telegraf package | RedHat"
|
||||
action: yum
|
||||
name=/tmp/telegraf_{{ telegraf_agent_version }}-1.x86_64.rpm
|
||||
state=installed
|
||||
- name: "RedHat | Add yum repository"
|
||||
yum_repository:
|
||||
name: influxdb
|
||||
description: InfluxDB Repository - RHEL $releasever
|
||||
baseurl: "https://repos.influxdata.com/rhel/{{ telegraf_redhat_releasever }}/$basearch/stable"
|
||||
gpgcheck: yes
|
||||
gpgkey: https://repos.influxdata.com/influxdb.key
|
||||
|
||||
- name: "RedHat | Install telegraf package"
|
||||
yum:
|
||||
name: "{{ telegraf_agent_package }}"
|
||||
state: "{{ telegraf_agent_package_state }}"
|
||||
notify: "Restart Telegraf"
|
||||
sudo: yes
|
||||
|
52
tasks/Suse.yml
Normal file
52
tasks/Suse.yml
Normal 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
|
111
tasks/configure_linux.yml
Normal file
111
tasks/configure_linux.yml
Normal 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
|
78
tasks/configure_windows.yml
Normal file
78
tasks/configure_windows.yml
Normal 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
|
@ -1,36 +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: "Set fact by remove the dots from version"
|
||||
action: set_fact
|
||||
telegraf_ver="{{ telegraf_agent_version.replace('.','') }}"
|
||||
- name: "Install on Suse"
|
||||
include_tasks: "Suse.yml"
|
||||
when: ansible_os_family == "Suse"
|
||||
|
||||
- name: "Copy the template for versions < 0.10.0"
|
||||
action: template
|
||||
src=etc-opt-telegraf-telegraf.conf.j2
|
||||
dest=/etc/opt/telegraf/telegraf.conf
|
||||
owner=root
|
||||
group=root
|
||||
mode=644
|
||||
when: telegraf_ver < 100
|
||||
sudo: yes
|
||||
notify: "Restart Telegraf"
|
||||
- name: "Configure telegraf"
|
||||
include_tasks: "configure_linux.yml"
|
||||
when:
|
||||
- ansible_os_family != "Windows"
|
||||
|
||||
- name: "Copy the template for versions >= 0.10.0"
|
||||
action: template
|
||||
src=telegraf.conf.j2
|
||||
dest=/etc/telegraf/telegraf.conf
|
||||
owner=root
|
||||
group=root
|
||||
mode=644
|
||||
when: telegraf_ver >= 100
|
||||
sudo: yes
|
||||
notify: "Restart Telegraf"
|
||||
- name: "Install / Configure telegraf on Windows"
|
||||
include_tasks: "configure_windows.yml"
|
||||
when:
|
||||
- ansible_os_family == "Windows"
|
||||
|
@ -1,12 +1,18 @@
|
||||
# Telegraf configuration
|
||||
### MANAGED BY {{ role_path|basename }} ANSIBLE ROLE ###
|
||||
|
||||
[tags]
|
||||
{% if telegraf_agent_tags is defined and telegraf_agent_tags is iterable %}
|
||||
{% for item in telegraf_agent_tags %}
|
||||
{% if telegraf_global_tags is defined and telegraf_global_tags is iterable %}
|
||||
{% for item in telegraf_global_tags %}
|
||||
{{ item.tag_name }} = "{{ item.tag_value }}"
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if telegraf_agent_aws_tags == true and ec2_tags is defined and ec2_tags != None %}
|
||||
{% for key, value in ec2_tags.tags.iteritems()%}
|
||||
{{telegraf_agent_aws_tags_prefix}}{{ key }} = "{{ value }}"
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
# Configuration for telegraf itself
|
||||
[agent]
|
||||
interval = "{{ telegraf_agent_interval }}s"
|
||||
@ -68,50 +74,5 @@
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if telegraf_plugins_extra is defined and telegraf_plugins_extra is iterable %}
|
||||
{% for item in telegraf_plugins_extra %}
|
||||
[{{ item.plugin }}]
|
||||
{% if item.interval is defined %}
|
||||
interval = "{{ item.interval }}s"
|
||||
{% endif %}
|
||||
{% if item.config is defined and item.config is iterable %}
|
||||
{% for items in item.config %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.tagpass is defined and item.tagpass is iterable %}
|
||||
[{{ item.plugin }}.tagpass]
|
||||
{% for items in item.tagpass %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.tagdrop is defined and item.tagdrop is iterable %}
|
||||
[{{ item.plugin }}.tagdrop]
|
||||
{% for items in item.tagdrop %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.pass is defined and item.pass is iterable %}
|
||||
[{{ item.plugin }}.pass]
|
||||
{% for items in item.pass %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.drop is defined and item.drop is iterable %}
|
||||
[{{ item.plugin }}.drop]
|
||||
{% for items in item.drop %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.specifications is defined and item.specifications is iterable %}
|
||||
[[{{item.plugin}}.specifications]]
|
||||
{% for items in item.specifications %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
47
templates/telegraf-extra-plugin.conf.j2
Normal file
47
templates/telegraf-extra-plugin.conf.j2
Normal file
@ -0,0 +1,47 @@
|
||||
### MANAGED BY {{ role_path|basename }} ANSIBLE ROLE ###
|
||||
|
||||
[[inputs.{{ item.value.plugin | default(item.key) }}]]
|
||||
{% if item.value.interval is defined %}
|
||||
interval = "{{ item.value.interval }}s"
|
||||
{% endif %}
|
||||
{% if item.value.config is defined and item.value.config is iterable %}
|
||||
{% for items in item.value.config %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.value.tags is defined and item.value.tags is iterable %}
|
||||
[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.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.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.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.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.value.plugin | default(item.key)}}.specifications]]
|
||||
{% for items in item.value.specifications %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
@ -1,20 +1,40 @@
|
||||
# Telegraf configuration
|
||||
### MANAGED BY {{ role_path|basename }} ANSIBLE ROLE ###
|
||||
|
||||
[tags]
|
||||
{% if telegraf_agent_tags is defined and telegraf_agent_tags is iterable %}
|
||||
{% for item in telegraf_agent_tags %}
|
||||
[global_tags]
|
||||
{% if telegraf_global_tags is defined and telegraf_global_tags is iterable %}
|
||||
{% for item in telegraf_global_tags %}
|
||||
{{ item.tag_name }} = "{{ item.tag_value }}"
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if telegraf_agent_aws_tags == true and ec2_tags is defined and ec2_tags != None %}
|
||||
{% for key, value in ec2_tags.tags.iteritems()%}
|
||||
{{telegraf_agent_aws_tags_prefix}}{{ key }} = "{{ value }}"
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
# Configuration for telegraf agent
|
||||
[agent]
|
||||
interval = "{{ telegraf_agent_interval }}s"
|
||||
debug = {{ telegraf_agent_debug | lower }}
|
||||
hostname = "{{ ansible_fqdn }}"
|
||||
hostname = "{{ telegraf_agent_hostname }}"
|
||||
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 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 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 %}
|
||||
|
||||
###############################################################################
|
||||
# OUTPUTS #
|
||||
@ -44,48 +64,9 @@
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.tagpass is defined and item.tagpass is iterable %}
|
||||
[{{ item.plugin }}.tagpass]
|
||||
{% for items in item.tagpass %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.tagdrop is defined and item.tagdrop is iterable %}
|
||||
[{{ item.plugin }}.tagdrop]
|
||||
{% for items in item.tagdrop %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.pass is defined and item.pass is iterable %}
|
||||
[{{ item.plugin }}.pass]
|
||||
{% for items in item.pass %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.drop is defined and item.drop is iterable %}
|
||||
[{{ item.plugin }}.drop]
|
||||
{% for items in item.drop %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if item.specifications is defined and item.specifications is iterable %}
|
||||
[[{{item.plugin}}.specifications]]
|
||||
{% for items in item.specifications %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if telegraf_plugins_extra is defined and telegraf_plugins_extra is iterable %}
|
||||
{% for item in telegraf_plugins_extra %}
|
||||
[[inputs.{{ item.plugin }}]]
|
||||
{% if item.interval is defined %}
|
||||
interval = "{{ item.interval }}s"
|
||||
{% endif %}
|
||||
{% if item.config is defined and item.config is iterable %}
|
||||
{% for items in item.config %}
|
||||
{% if item.tags is defined and item.tags is iterable %}
|
||||
[inputs.{{ item.plugin }}.tags]
|
||||
{% for items in item.tags %}
|
||||
{{ items }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
@ -113,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 %}
|
||||
@ -121,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 %}
|
@ -1,27 +0,0 @@
|
||||
require 'serverspec'
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'Telegraf Packages' do
|
||||
describe package('telegraf') do
|
||||
it { should be_installed }
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
describe 'Telegraf Services' do
|
||||
describe service('telegraf') do
|
||||
it { should be_enabled }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'Telegraf Configuration' do
|
||||
describe file('/etc/telegraf/telegraf.conf') do
|
||||
it { should be_file}
|
||||
it { should be_owned_by 'root'}
|
||||
it { should be_grouped_into 'root'}
|
||||
|
||||
it { should contain "[cpu]" }
|
||||
it { should contain "[mem]" }
|
||||
it { should contain "url = \"http://localhost:8086\"" }
|
||||
end
|
||||
end
|
@ -1,2 +0,0 @@
|
||||
require 'serverspec'
|
||||
set :backend, :exec
|
@ -1,2 +0,0 @@
|
||||
---
|
||||
# vars file for .
|
Reference in New Issue
Block a user