mirror of
https://github.com/dj-wasabi/ansible-telegraf.git
synced 2025-07-17 08:46:37 +00:00
Compare commits
100 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 |
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.
|
14
.travis.yml
14
.travis.yml
@ -4,17 +4,13 @@ language: python
|
|||||||
services:
|
services:
|
||||||
- docker
|
- docker
|
||||||
|
|
||||||
before_install:
|
|
||||||
- sudo apt-get -qq update
|
|
||||||
- sudo apt-get install -o Dpkg::Options::="--force-confold" --force-yes -y docker-engine
|
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- pip install molecule ansible docker-py
|
- curl -sSlo requirements.txt https://raw.githubusercontent.com/dj-wasabi/ansible-ci-base/master/requirements.txt
|
||||||
|
- pip install -r requirements.txt
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- molecule --version
|
- molecule --version
|
||||||
- ansible --version
|
- ansible --version
|
||||||
- molecule test
|
- molecule test
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
webhooks: https://galaxy.ansible.com/api/v1/notifications/
|
webhooks: https://galaxy.ansible.com/api/v1/notifications/
|
||||||
|
43
CHANGELOG.md
43
CHANGELOG.md
@ -5,6 +5,49 @@ Below an overview of all changes in the releases.
|
|||||||
|
|
||||||
Version (Release date)
|
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)
|
0.7.0 (2017-02-23)
|
||||||
|
|
||||||
* Replace action by modules #26 (By pull request: tszym (Thanks!))
|
* Replace action by modules #26 (By pull request: tszym (Thanks!))
|
||||||
|
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.
|
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. -->
|
73
README.md
73
README.md
@ -14,8 +14,21 @@ Design goals are to have a minimal memory footprint with a plugin system so that
|
|||||||
|
|
||||||
## Requirements
|
## 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
|
## Upgrade
|
||||||
### 0.7.0
|
### 0.7.0
|
||||||
@ -24,18 +37,22 @@ 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.
|
If I configure a telegraf_plugins_extra, run ansible, delete the plugin and run ansible again, the plugin stays on the machine.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Role Variables
|
## Role Variables
|
||||||
|
|
||||||
|
### Overall variables
|
||||||
|
|
||||||
The following parameters can be set for the Telegraf agent:
|
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_interval`: The interval configured for sending data to the server. Default: `10`
|
||||||
* `telegraf_agent_debug`: Run 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_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_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_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_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_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_metric_buffer_limit`: The agent metric buffer limit. Default: 10000 (since v0.13)
|
||||||
@ -47,7 +64,7 @@ Full agent settings reference: https://github.com/influxdata/telegraf/blob/maste
|
|||||||
|
|
||||||
You can set tags for the host running telegraf:
|
You can set tags for the host running telegraf:
|
||||||
|
|
||||||
telegraf_agent_tags:
|
telegraf_global_tags:
|
||||||
- tag_name: some_name
|
- tag_name: some_name
|
||||||
tag_value: some_value
|
tag_value: some_value
|
||||||
|
|
||||||
@ -68,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.
|
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_default`
|
||||||
* `telegraf_plugins_extra`
|
* `telegraf_plugins_extra`
|
||||||
@ -88,14 +117,15 @@ With the property `telegraf_plugins_default` it is set to use the default set of
|
|||||||
|
|
||||||
Every telegraf agent has these as a 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
|
cat group_vars/mysql_database
|
||||||
telegraf_plugins_extra:
|
telegraf_plugins_extra:
|
||||||
- plugin: mysql
|
mysql:
|
||||||
config:
|
config:
|
||||||
- servers = ["root:{{ mysql_root_password }}@tcp(localhost:3306)/"]
|
- 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:
|
Telegraf plugin options:
|
||||||
|
|
||||||
@ -129,15 +159,28 @@ No dependencies
|
|||||||
roles:
|
roles:
|
||||||
- { role: dj-wasabi.telegraf }
|
- { role: dj-wasabi.telegraf }
|
||||||
|
|
||||||
##Contributors
|
## Contributors
|
||||||
|
|
||||||
The following have contributed to this Ansible role:
|
The following have contributed to this Ansible role:
|
||||||
|
|
||||||
* aferrari-technisys
|
* Thomas Szymanski
|
||||||
* stvnwrgs
|
* Alejandro
|
||||||
* lhoss
|
* Slawomir Skowron
|
||||||
* thecodeassassin
|
* Ismael
|
||||||
* Ismael
|
* Laurent Hoss
|
||||||
* romainbureau
|
* Anthony ARNAUD
|
||||||
|
* Rick Box
|
||||||
|
* Emerson Knapp
|
||||||
|
* gaelL
|
||||||
|
* Steven Wirges
|
||||||
|
* zend0
|
||||||
|
* Angristan
|
||||||
|
* Olivier Boukili
|
||||||
|
* Romain BUREAU
|
||||||
|
* TheCodeAssassin
|
||||||
|
* tjend
|
||||||
|
|
||||||
|
Thank you all!
|
||||||
|
|
||||||
## Molecule
|
## Molecule
|
||||||
|
|
||||||
|
@ -1,26 +1,30 @@
|
|||||||
---
|
---
|
||||||
# defaults file for ansible-telegraf
|
# defaults file for ansible-telegraf
|
||||||
|
|
||||||
#telegraf_agent_version: 0.10.1
|
telegraf_agent_version: 1.9.0
|
||||||
telegraf_agent_version: 1.0.0
|
telegraf_agent_version_patch: 1
|
||||||
|
telegraf_agent_package: telegraf
|
||||||
|
telegraf_agent_package_state: present
|
||||||
telegraf_agent_hostname: "{{ ansible_fqdn }}"
|
telegraf_agent_hostname: "{{ ansible_fqdn }}"
|
||||||
telegraf_agent_interval: 10
|
telegraf_agent_interval: 10
|
||||||
telegraf_agent_debug: False
|
telegraf_agent_debug: False
|
||||||
telegraf_agent_round_interval: True
|
telegraf_agent_round_interval: True
|
||||||
telegraf_agent_flush_interval: 10
|
telegraf_agent_flush_interval: 10
|
||||||
telegraf_agent_flush_jitter: 0
|
telegraf_agent_flush_jitter: 0
|
||||||
|
telegraf_agent_aws_tags: False
|
||||||
|
telegraf_agent_aws_tags_prefix: ""
|
||||||
|
|
||||||
#v0.13 settings (not sure if supported in older version):
|
# v0.13 settings (not sure if supported in older version):
|
||||||
telegraf_agent_collection_jitter: 0
|
telegraf_agent_collection_jitter: 0
|
||||||
telegraf_agent_metric_batch_size: 1000
|
telegraf_agent_metric_batch_size: 1000
|
||||||
telegraf_agent_metric_buffer_limit: 10000
|
telegraf_agent_metric_buffer_limit: 10000
|
||||||
telegraf_agent_quiet: False
|
telegraf_agent_quiet: False
|
||||||
|
|
||||||
#v1.1 settings:
|
# v1.1 settings:
|
||||||
telegraf_agent_logfile: ""
|
telegraf_agent_logfile: ""
|
||||||
telegraf_agent_omit_hostname: False
|
telegraf_agent_omit_hostname: False
|
||||||
|
|
||||||
telegraf_agent_tags:
|
telegraf_global_tags: []
|
||||||
|
|
||||||
telegraf_agent_output:
|
telegraf_agent_output:
|
||||||
- type: influxdb
|
- type: influxdb
|
||||||
@ -29,6 +33,7 @@ telegraf_agent_output:
|
|||||||
- database = "telegraf"
|
- database = "telegraf"
|
||||||
- precision = "s"
|
- precision = "s"
|
||||||
|
|
||||||
|
# defaults - /etc/telegraf/telegraf.conf
|
||||||
telegraf_plugins_default:
|
telegraf_plugins_default:
|
||||||
- plugin: cpu
|
- plugin: cpu
|
||||||
config:
|
config:
|
||||||
@ -40,5 +45,20 @@ telegraf_plugins_default:
|
|||||||
- plugin: system
|
- plugin: system
|
||||||
- plugin: swap
|
- plugin: swap
|
||||||
- plugin: netstat
|
- 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
|
@ -7,3 +7,9 @@
|
|||||||
state: restarted
|
state: restarted
|
||||||
enabled: yes
|
enabled: yes
|
||||||
become: yes
|
become: yes
|
||||||
|
|
||||||
|
- name: "Restart Windows Telegraf"
|
||||||
|
win_service:
|
||||||
|
name: Telegraf
|
||||||
|
start_mode: auto
|
||||||
|
state: restarted
|
||||||
|
@ -2,19 +2,27 @@
|
|||||||
galaxy_info:
|
galaxy_info:
|
||||||
author: Werner Dijkerman
|
author: Werner Dijkerman
|
||||||
description: Installing and configuring Telegraf
|
description: Installing and configuring Telegraf
|
||||||
company:
|
company: myCompany.Dotcom
|
||||||
license: license BSD
|
license: MIT
|
||||||
min_ansible_version: 1.2
|
min_ansible_version: 2.4
|
||||||
platforms:
|
platforms:
|
||||||
- name: EL
|
- name: EL
|
||||||
versions:
|
versions:
|
||||||
- all
|
- all
|
||||||
- name: Ubuntu
|
- name: Ubuntu
|
||||||
versions:
|
versions:
|
||||||
- all
|
- all
|
||||||
- name: Debian
|
- name: Debian
|
||||||
versions:
|
versions:
|
||||||
- all
|
- all
|
||||||
categories:
|
- name: opensuse
|
||||||
- monitoring
|
versions:
|
||||||
dependencies: []
|
- all
|
||||||
|
- name: Windows
|
||||||
|
versions:
|
||||||
|
- all
|
||||||
|
|
||||||
|
galaxy_tags:
|
||||||
|
- monitoring
|
||||||
|
|
||||||
|
dependencies: []
|
||||||
|
24
molecule.yml
24
molecule.yml
@ -1,24 +0,0 @@
|
|||||||
---
|
|
||||||
ansible:
|
|
||||||
playbook: playbook.yml
|
|
||||||
|
|
||||||
driver:
|
|
||||||
name: docker
|
|
||||||
|
|
||||||
verifier:
|
|
||||||
name: testinfra
|
|
||||||
|
|
||||||
docker:
|
|
||||||
containers:
|
|
||||||
- name: telegraf-centos
|
|
||||||
ansible_groups:
|
|
||||||
- group1
|
|
||||||
image: milcom/centos7-systemd
|
|
||||||
image_version: latest
|
|
||||||
privileged: True
|
|
||||||
- name: telegraf-debian
|
|
||||||
ansible_groups:
|
|
||||||
- group2
|
|
||||||
image: maint/debian-systemd
|
|
||||||
image_version: latest
|
|
||||||
privileged: True
|
|
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
|
4
molecule/default/playbook.yml
Normal file
4
molecule/default/playbook.yml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
- 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
|
15
playbook.yml
15
playbook.yml
@ -1,15 +0,0 @@
|
|||||||
---
|
|
||||||
- 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'
|
|
||||||
roles:
|
|
||||||
- role: ansible-telegraf
|
|
@ -1,60 +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:
|
stat:
|
||||||
path: /usr/lib/apt/methods/https
|
path: /usr/lib/apt/methods/https
|
||||||
register: apt_https_transport
|
register: apt_https_transport
|
||||||
tags:
|
|
||||||
- telegraf
|
|
||||||
- packages
|
|
||||||
|
|
||||||
- name: Install APT HTTPS transport.
|
- name: "Debian | Install APT HTTPS transport"
|
||||||
apt:
|
apt:
|
||||||
name: "apt-transport-https"
|
name: "apt-transport-https"
|
||||||
state: present
|
state: present
|
||||||
when: not apt_https_transport.stat.exists
|
when:
|
||||||
|
- not apt_https_transport.stat.exists
|
||||||
become: yes
|
become: yes
|
||||||
tags:
|
|
||||||
- telegraf
|
|
||||||
- packages
|
|
||||||
|
|
||||||
- name: Download Influxdb apt key.
|
- name: "Debian | Download Telegraf apt key"
|
||||||
apt_key:
|
apt_key:
|
||||||
url: "https://repos.influxdata.com/influxdb.key"
|
url: "https://repos.influxdata.com/influxdb.key"
|
||||||
|
id: 2582E0C5
|
||||||
state: present
|
state: present
|
||||||
become: yes
|
become: yes
|
||||||
tags:
|
|
||||||
- telegraf
|
|
||||||
- packages
|
|
||||||
|
|
||||||
- name: Add Influxdb repository (using LSB).
|
- name: "Debian | Add Telegraf repository (using LSB)"
|
||||||
apt_repository:
|
apt_repository:
|
||||||
repo: "deb https://repos.influxdata.com/{{ ansible_distribution|lower }} {{ ansible_lsb.codename }} stable"
|
repo: "deb https://repos.influxdata.com/{{ ansible_distribution|lower }} {{ ansible_lsb.codename }} stable"
|
||||||
filename: "influxdb"
|
filename: "telegraf"
|
||||||
state: present
|
state: present
|
||||||
become: yes
|
become: yes
|
||||||
tags:
|
when:
|
||||||
- telegraf
|
- ansible_lsb is defined
|
||||||
- packages
|
- ansible_lsb.codename is defined
|
||||||
when: ansible_lsb is defined
|
|
||||||
|
|
||||||
- name: Add Influxdb repository.
|
- name: "Debian | Add Telegraf repository"
|
||||||
apt_repository:
|
apt_repository:
|
||||||
repo: "deb https://repos.influxdata.com/{{ ansible_distribution|lower }} {{ ansible_distribution_release }} stable"
|
repo: "deb https://repos.influxdata.com/{{ ansible_distribution|lower }} {{ ansible_distribution_release }} stable"
|
||||||
filename: "influxdb"
|
filename: "telegraf"
|
||||||
state: present
|
state: present
|
||||||
become: yes
|
become: yes
|
||||||
tags:
|
when:
|
||||||
- telegraf
|
- ansible_lsb is not defined or ansible_lsb.codename is not defined
|
||||||
- packages
|
|
||||||
when: ansible_lsb is not defined
|
|
||||||
|
|
||||||
- name: "Install telegraf package | Debian"
|
- name: "Debian | Install telegraf package"
|
||||||
apt:
|
apt:
|
||||||
name: telegraf
|
name: "{{ telegraf_agent_package }}"
|
||||||
state: installed
|
state: "{{ telegraf_agent_package_state }}"
|
||||||
|
force: True
|
||||||
notify: "Restart Telegraf"
|
notify: "Restart Telegraf"
|
||||||
become: yes
|
become: yes
|
||||||
tags:
|
|
||||||
- telegraf
|
|
||||||
- packages
|
|
||||||
|
@ -1,40 +1,22 @@
|
|||||||
---
|
---
|
||||||
|
# description: RedHat specific installation
|
||||||
|
|
||||||
- name: "Enable EPEL"
|
- name: "RedHat | Set name if state == latest"
|
||||||
yum:
|
set_fact:
|
||||||
name: epel-release
|
telegraf_agent_package: telegraf-{{ telegraf_agent_version }}
|
||||||
state: installed
|
when:
|
||||||
|
- telegraf_agent_package_state != "latest"
|
||||||
|
|
||||||
- name: "Installing some dependencies"
|
- name: "RedHat | Add yum repository"
|
||||||
yum:
|
|
||||||
name: "{{ item }}"
|
|
||||||
state: installed
|
|
||||||
with_items:
|
|
||||||
- python-pip
|
|
||||||
- python-devel
|
|
||||||
- gcc
|
|
||||||
- libffi-devel
|
|
||||||
- openssl-devel
|
|
||||||
|
|
||||||
- name: "Installing PIP dependensies"
|
|
||||||
pip:
|
|
||||||
name: "{{ item }}"
|
|
||||||
state: present
|
|
||||||
with_items:
|
|
||||||
- urllib3
|
|
||||||
- pyopenssl
|
|
||||||
- ndg-httpsclient
|
|
||||||
|
|
||||||
- name: "Add yum repository | RedHat"
|
|
||||||
yum_repository:
|
yum_repository:
|
||||||
name: influxdb
|
name: influxdb
|
||||||
description: InfluxDB Repository - RHEL $releasever
|
description: InfluxDB Repository - RHEL $releasever
|
||||||
baseurl: https://repos.influxdata.com/rhel/$releasever/$basearch/stable
|
baseurl: "https://repos.influxdata.com/rhel/{{ telegraf_redhat_releasever }}/$basearch/stable"
|
||||||
gpgcheck: yes
|
gpgcheck: yes
|
||||||
gpgkey: https://repos.influxdata.com/influxdb.key
|
gpgkey: https://repos.influxdata.com/influxdb.key
|
||||||
|
|
||||||
- name: "Install telegraf package | RedHat"
|
- name: "RedHat | Install telegraf package"
|
||||||
yum:
|
yum:
|
||||||
name: "telegraf-{{ telegraf_agent_version }}"
|
name: "{{ telegraf_agent_package }}"
|
||||||
state: installed
|
state: "{{ telegraf_agent_package_state }}"
|
||||||
notify: "Restart Telegraf"
|
notify: "Restart Telegraf"
|
||||||
|
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,43 +1,29 @@
|
|||||||
---
|
---
|
||||||
# tasks file for ansible-telegraf
|
# tasks file for ansible-telegraf
|
||||||
|
|
||||||
- name: "Install the correct repository"
|
- name: "Install on RedHat"
|
||||||
include: "RedHat.yml"
|
include_tasks: "RedHat.yml"
|
||||||
when: ansible_os_family == "RedHat"
|
when:
|
||||||
|
- ansible_os_family == "RedHat"
|
||||||
|
|
||||||
- name: "Install the correct repository"
|
- name: "Install on Debian"
|
||||||
include: "Debian.yml"
|
include_tasks: "Debian.yml"
|
||||||
when: ansible_os_family == "Debian"
|
when:
|
||||||
|
- ansible_os_family == "Debian"
|
||||||
|
tags:
|
||||||
|
- telegraf
|
||||||
|
- packages
|
||||||
|
|
||||||
- name: "Copy the template for versions < 0.10.0"
|
- name: "Install on Suse"
|
||||||
template:
|
include_tasks: "Suse.yml"
|
||||||
src: etc-opt-telegraf-telegraf.conf.j2
|
when: ansible_os_family == "Suse"
|
||||||
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"
|
- name: "Configure telegraf"
|
||||||
template:
|
include_tasks: "configure_linux.yml"
|
||||||
src: telegraf.conf.j2
|
when:
|
||||||
dest: /etc/telegraf/telegraf.conf
|
- ansible_os_family != "Windows"
|
||||||
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"
|
- name: "Install / Configure telegraf on Windows"
|
||||||
template:
|
include_tasks: "configure_windows.yml"
|
||||||
src: "telegraf-extra-plugin.conf.j2"
|
when:
|
||||||
dest: "/etc/telegraf/telegraf.d/extra-plugins.conf"
|
- ansible_os_family == "Windows"
|
||||||
owner: telegraf
|
|
||||||
group: telegraf
|
|
||||||
mode: 0640
|
|
||||||
when: "telegraf_plugins_extra is defined and telegraf_plugins_extra is iterable"
|
|
||||||
become: yes
|
|
||||||
notify: "Restart Telegraf"
|
|
||||||
|
@ -1,12 +1,18 @@
|
|||||||
# Telegraf configuration
|
### MANAGED BY {{ role_path|basename }} ANSIBLE ROLE ###
|
||||||
|
|
||||||
[tags]
|
[tags]
|
||||||
{% if telegraf_agent_tags is defined and telegraf_agent_tags is iterable %}
|
{% if telegraf_global_tags is defined and telegraf_global_tags is iterable %}
|
||||||
{% for item in telegraf_agent_tags %}
|
{% for item in telegraf_global_tags %}
|
||||||
{{ item.tag_name }} = "{{ item.tag_value }}"
|
{{ item.tag_name }} = "{{ item.tag_value }}"
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% 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
|
# Configuration for telegraf itself
|
||||||
[agent]
|
[agent]
|
||||||
interval = "{{ telegraf_agent_interval }}s"
|
interval = "{{ telegraf_agent_interval }}s"
|
||||||
|
@ -1,49 +1,47 @@
|
|||||||
{% if telegraf_plugins_extra is defined and telegraf_plugins_extra is iterable %}
|
### MANAGED BY {{ role_path|basename }} ANSIBLE ROLE ###
|
||||||
{% for item in telegraf_plugins_extra %}
|
|
||||||
[[inputs.{{ item.plugin }}]]
|
[[inputs.{{ item.value.plugin | default(item.key) }}]]
|
||||||
{% if item.interval is defined %}
|
{% if item.value.interval is defined %}
|
||||||
interval = "{{ item.interval }}s"
|
interval = "{{ item.value.interval }}s"
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.config is defined and item.config is iterable %}
|
{% if item.value.config is defined and item.value.config is iterable %}
|
||||||
{% for items in item.config %}
|
{% for items in item.value.config %}
|
||||||
{{ items }}
|
{{ items }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.tags is defined and item.tags is iterable %}
|
{% if item.value.tags is defined and item.value.tags is iterable %}
|
||||||
[inputs.{{ item.plugin }}.tags]
|
[inputs.{{ item.value.plugin | default(item.key) }}.tags]
|
||||||
{% for items in item.tags %}
|
{% for items in item.value.tags %}
|
||||||
{{ items }}
|
{{ items }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.tagpass is defined and item.tagpass is iterable %}
|
{% if item.value.tagpass is defined and item.value.tagpass is iterable %}
|
||||||
[{{ item.plugin }}.tagpass]
|
[{{ item.value.plugin | default(item.key) }}.tagpass]
|
||||||
{% for items in item.tagpass %}
|
{% for items in item.value.tagpass %}
|
||||||
{{ items }}
|
{{ items }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.tagdrop is defined and item.tagdrop is iterable %}
|
{% if item.value.tagdrop is defined and item.value.tagdrop is iterable %}
|
||||||
[{{ item.plugin }}.tagdrop]
|
[{{ item.value.plugin | default(item.key) }}.tagdrop]
|
||||||
{% for items in item.tagdrop %}
|
{% for items in item.value.tagdrop %}
|
||||||
{{ items }}
|
{{ items }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.pass is defined and item.pass is iterable %}
|
{% if item.value.pass is defined and item.value.pass is iterable %}
|
||||||
[{{ item.plugin }}.pass]
|
[{{ item.value.plugin | default(item.key) }}.pass]
|
||||||
{% for items in item.pass %}
|
{% for items in item.value.pass %}
|
||||||
{{ items }}
|
{{ items }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.drop is defined and item.drop is iterable %}
|
{% if item.value.drop is defined and item.value.drop is iterable %}
|
||||||
[{{ item.plugin }}.drop]
|
[{{ item.value.plugin | default(item.key) }}.drop]
|
||||||
{% for items in item.drop %}
|
{% for items in item.value.drop %}
|
||||||
{{ items }}
|
{{ items }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if item.specifications is defined and item.specifications is iterable %}
|
{% if item.value.specifications is defined and item.value.specifications is iterable %}
|
||||||
[[{{item.plugin}}.specifications]]
|
[[{{item.value.plugin | default(item.key)}}.specifications]]
|
||||||
{% for items in item.specifications %}
|
{% for items in item.value.specifications %}
|
||||||
{{ items }}
|
{{ items }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
|
@ -1,12 +1,18 @@
|
|||||||
# Telegraf configuration
|
### MANAGED BY {{ role_path|basename }} ANSIBLE ROLE ###
|
||||||
|
|
||||||
[tags]
|
[global_tags]
|
||||||
{% if telegraf_agent_tags is defined and telegraf_agent_tags is iterable %}
|
{% if telegraf_global_tags is defined and telegraf_global_tags is iterable %}
|
||||||
{% for item in telegraf_agent_tags %}
|
{% for item in telegraf_global_tags %}
|
||||||
{{ item.tag_name }} = "{{ item.tag_value }}"
|
{{ item.tag_name }} = "{{ item.tag_value }}"
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% 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
|
# Configuration for telegraf agent
|
||||||
[agent]
|
[agent]
|
||||||
interval = "{{ telegraf_agent_interval }}s"
|
interval = "{{ telegraf_agent_interval }}s"
|
||||||
@ -15,14 +21,18 @@
|
|||||||
round_interval = {{ telegraf_agent_round_interval | lower }}
|
round_interval = {{ telegraf_agent_round_interval | lower }}
|
||||||
flush_interval = "{{ telegraf_agent_flush_interval }}s"
|
flush_interval = "{{ telegraf_agent_flush_interval }}s"
|
||||||
flush_jitter = "{{ telegraf_agent_flush_jitter }}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"
|
collection_jitter = "{{ telegraf_agent_collection_jitter }}s"
|
||||||
metric_batch_size = {{ telegraf_agent_metric_batch_size }}
|
metric_batch_size = {{ telegraf_agent_metric_batch_size }}
|
||||||
metric_buffer_limit = {{ telegraf_agent_metric_buffer_limit }}
|
metric_buffer_limit = {{ telegraf_agent_metric_buffer_limit }}
|
||||||
quiet = {{ telegraf_agent_quiet | lower }}
|
quiet = {{ telegraf_agent_quiet | lower }}
|
||||||
{% endif %}
|
{% 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 }}"
|
logfile = "{{ telegraf_agent_logfile }}"
|
||||||
|
{% endif %}
|
||||||
omit_hostname = {{ telegraf_agent_omit_hostname | lower }}
|
omit_hostname = {{ telegraf_agent_omit_hostname | lower }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@ -84,6 +94,16 @@
|
|||||||
{{ items }}
|
{{ items }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% 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 %}
|
{% if item.specifications is defined and item.specifications is iterable %}
|
||||||
[[{{item.plugin}}.specifications]]
|
[[{{item.plugin}}.specifications]]
|
||||||
{% for items in item.specifications %}
|
{% for items in item.specifications %}
|
||||||
@ -92,3 +112,10 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% 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,6 +0,0 @@
|
|||||||
localhost
|
|
||||||
[group1]
|
|
||||||
telegraf-centos
|
|
||||||
|
|
||||||
[group2]
|
|
||||||
telegraf-debian
|
|
@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
- hosts: localhost
|
|
||||||
remote_user: root
|
|
||||||
roles:
|
|
||||||
- ansible-zabbix-agent
|
|
@ -1,23 +0,0 @@
|
|||||||
from testinfra.utils.ansible_runner import AnsibleRunner
|
|
||||||
|
|
||||||
testinfra_hosts = AnsibleRunner('.molecule/ansible_inventory').get_hosts('all')
|
|
||||||
|
|
||||||
|
|
||||||
def test_telegraf_running_and_enabled(Service, SystemInfo):
|
|
||||||
telegraf = Service("telegraf")
|
|
||||||
assert telegraf.is_enabled
|
|
||||||
if SystemInfo.distribution == 'centos':
|
|
||||||
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('[[inputs.cpu]]')
|
|
||||||
|
|
||||||
|
|
||||||
def test_telegraf_package(Package, SystemInfo):
|
|
||||||
telegraf = Package('telegraf')
|
|
||||||
assert telegraf.is_installed
|
|
Reference in New Issue
Block a user