13 Commits
0.3.0 ... 0.5.0

23 changed files with 218 additions and 227 deletions

9
.gitignore vendored
View File

@ -1,4 +1,7 @@
.kitchen/
.kitchen.local.yml
.idea/
.idea
.molecule
tests/.cache
.cache
__pycache__
*.retry
pmip

View File

@ -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:

17
.travis.yml Normal file
View File

@ -0,0 +1,17 @@
---
sudo: required
language: python
services:
- docker
before_install:
- sudo apt-get -qq update
- sudo apt-get install -o Dpkg::Options::="--force-confold" --force-yes -y docker-engine
install:
- pip install molecule
script:
- molecule test
notifications:
webhooks: https://galaxy.ansible.com/api/v1/notifications/

View File

@ -5,6 +5,20 @@ Below an overview of all changes in the releases.
Version (Release date)
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
* Added travis-ci test for testing default installation when PR is made
* Fixed Download url for Debian
* Removed default entry for telegraf_plugins_extra
0.3.0 (2016-01-13)
* Made it work with telegraf 0.10.0

View File

@ -1,5 +0,0 @@
source "https://rubygems.org"
gem "test-kitchen"
gem "kitchen-docker"
gem "kitchen-ansible"

View File

@ -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

View File

@ -1,6 +1,10 @@
dj-wasabi.telegraf
=========
Build status:
[![Build Status](https://travis-ci.org/dj-wasabi/ansible-telegraf.svg?branch=master)](https://travis-ci.org/dj-wasabi/ansible-telegraf)
This role will install and configure telegraf.
Telegraf is an agent written in Go for collecting metrics from the system it's running on, or from other services, and writing them into InfluxDB.
@ -19,7 +23,9 @@ Role 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.0.0`
* `telegraf_agent_rpm_url`: The full path to the RPM file located on a webserver.
* `telegraf_agent_deb_url`: The full path to the DEB file located on a webserver.
* `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_round_interval`: Rounds collection interval to 'interval' Default: True
@ -110,12 +116,11 @@ Example Playbook
The following have contributed to this Ansible role:
* aferrari-technisys
* stvnwrgs
# Molecule
Test Kitchen
------------
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
-------

View File

@ -1,13 +1,19 @@
---
# defaults file for ansible-telegraf
telegraf_agent_version: 0.10.0
#telegraf_agent_version: 0.10.1
telegraf_agent_version: 1.0.0
telegraf_agent_version_sub_l: _beta2
telegraf_agent_version_sub_u: -beta2
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_rpm_url: https://dl.influxdata.com/telegraf/releases/telegraf-{{ telegraf_agent_version }}{{ telegraf_agent_version_sub_l }}.x86_64.rpm
telegraf_agent_deb_url: https://dl.influxdata.com/telegraf/releases/telegraf_{{ telegraf_agent_version }}{{ telegraf_agent_version_sub_u }}_amd64.deb
telegraf_agent_tags:
telegraf_agent_output:
@ -30,7 +36,3 @@ telegraf_plugins_default:
- plugin: netstat
telegraf_plugins_extra:
- plugin: procstat
specifications:
- prefix = "" # optional string to prefix measurements
- exe = "java" # the name as pgrep can find

18
molecule.yml Normal file
View File

@ -0,0 +1,18 @@
---
ansible:
playbook: playbook.yml
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

15
playbook.yml Normal file
View File

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

View File

@ -2,13 +2,13 @@
- name: "Fetch telegraf installation package | Debian"
action: get_url
url=http://get.influxdb.org/telegraf/telegraf-{{ telegraf_agent_version }}_amd64.deb
dest=/tmp/telegraf_{{ telegraf_agent_version }}_amd64.deb
url={{ telegraf_agent_deb_url }}
dest=/tmp/telegraf_{{ telegraf_agent_version }}-1_amd64.deb
mode=0440
- name: "Install telegraf package | Debian"
action: apt
deb=/tmp/telegraf_{{ telegraf_agent_version }}_amd64.deb
deb=/tmp/telegraf_{{ telegraf_agent_version }}-1_amd64.deb
state=installed
notify: "Restart Telegraf"
sudo: yes

View File

@ -1,14 +1,38 @@
---
- name: "Enable EPEL"
action: yum
name=epel-release
state=installed
- name: "Installing some dependencies"
action: yum
name={{ item }}
state=installed
with_items:
- python-pip
- python-devel
- gcc
- libffi-devel
- openssl-devel
- name: "Installing PIP dependensies"
action: pip
name={{ item }}
state=present
with_items:
- urllib3
- pyopenssl
- ndg-httpsclient
- 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
url="{{ telegraf_agent_rpm_url }}"
dest=/tmp/telegraf_{{ telegraf_agent_version }}.x86_64.rpm
mode=0440
- name: "Install telegraf package | RedHat"
action: yum
name=/tmp/telegraf_{{ telegraf_agent_version }}-1.x86_64.rpm
name=/tmp/telegraf_{{ telegraf_agent_version }}.x86_64.rpm
state=installed
notify: "Restart Telegraf"
sudo: yes

View File

@ -10,27 +10,39 @@
when: ansible_os_family == "Debian"
- name: "Set fact by remove the dots from version"
action: set_fact
telegraf_ver="{{ telegraf_agent_version.replace('.','') }}"
set_fact:
telegraf_ver: "{{ telegraf_agent_version.replace('.','') }}"
- 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
template:
src: etc-opt-telegraf-telegraf.conf.j2
dest: /etc/opt/telegraf/telegraf.conf
owner: root
group: root
mode: 0644
when: telegraf_ver < 100
sudo: yes
notify: "Restart Telegraf"
- 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
template:
src: telegraf.conf.j2
dest: /etc/telegraf/telegraf.conf
owner: root
group: root
mode: 0644
when: telegraf_ver >= 100
sudo: yes
notify: "Restart Telegraf"
- name: "Copy telegraf extra plugins"
template:
src: "telegraf-extra-plugin.conf.j2"
dest: "/etc/telegraf/telegraf.d/{{ item.plugin }}.conf"
owner: root
group: root
mode: 644
with_items: "{{ telegraf_plugins_extra }}"
when: "telegraf_plugins_extra is defined and telegraf_plugins_extra is iterable"
sudo: yes
notify: "Restart Telegraf"

View File

@ -68,50 +68,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 %}

View File

@ -0,0 +1,44 @@
{% 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 %}
{{ 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 %}

View File

@ -76,48 +76,3 @@
{% 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 %}
{{ 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 %}

View File

@ -1,4 +0,0 @@
---
- hosts: localhost
roles:
- role: ansible-telegraf

View File

@ -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/opt/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

View File

@ -1,2 +0,0 @@
require 'serverspec'
set :backend, :exec

6
tests/inventory Normal file
View File

@ -0,0 +1,6 @@
localhost
[group1]
telegraf-centos
[group2]
telegraf-debian

5
tests/test.yml Normal file
View File

@ -0,0 +1,5 @@
---
- hosts: localhost
remote_user: root
roles:
- ansible-zabbix-agent

19
tests/test_docker.py Normal file
View File

@ -0,0 +1,19 @@
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 == "root"
assert telegraf.group == "root"
assert telegraf.mode == 0o644
assert telegraf.contains('[[inputs.cpu]]')
def test_telegraf_package(Package, SystemInfo):
telegraf = Package('telegraf')
assert telegraf.is_installed

View File

@ -1,2 +0,0 @@
---
# vars file for .