mirror of
https://github.com/natelandau/ansible-homelab-config.git
synced 2025-11-18 09:53:41 -05:00
193 lines
6.2 KiB
YAML
193 lines
6.2 KiB
YAML
---
|
|
# TASK DESCRIPTION:
|
|
# Downloads, installs, and configures Telegraf
|
|
|
|
# --------------------------------- Set variables depending on system type
|
|
- name: "Configure variables"
|
|
block:
|
|
- name: "set variable: telegraph_binary_location (Debian)"
|
|
ansible.builtin.set_fact:
|
|
telegraph_binary_location: "/usr/bin/telegraf"
|
|
when:
|
|
- ansible_os_family == 'Debian'
|
|
|
|
- name: "set variable: telegraph_binary_location (MacOS)"
|
|
ansible.builtin.set_fact:
|
|
telegraph_binary_location: "/usr/local/bin/telegraf"
|
|
when:
|
|
- ansible_os_family == 'Darwin'
|
|
|
|
- name: "set fact: telegraph_config_location (Debian)"
|
|
ansible.builtin.set_fact:
|
|
telegraph_config_location: "/etc/telegraf"
|
|
when:
|
|
- ansible_os_family == 'Debian'
|
|
|
|
- name: "set fact: telegraph_config_location (macOS)"
|
|
ansible.builtin.set_fact:
|
|
telegraph_config_location: "/usr/local/etc"
|
|
when:
|
|
- ansible_os_family == 'Darwin'
|
|
|
|
- name: "set fact: telegraph_config_location (macOS)"
|
|
ansible.builtin.set_fact:
|
|
telegraph_config_location: "/volume1/docker/telegraf/config"
|
|
when:
|
|
- inventory_hostname == 'synology'
|
|
|
|
- name: "Fail if arm Mac (need to update task) or variables not defined"
|
|
ansible.builtin.assert:
|
|
that:
|
|
- telegraph_binary_location is defined
|
|
- telegraph_config_location is defined
|
|
- not mac_arm
|
|
fail_msg: "Unable to install Telegraf on this host"
|
|
|
|
- name: "Install/upgrade Telegraf"
|
|
block:
|
|
- name: "set fact: Need telegraf install?"
|
|
ansible.builtin.set_fact:
|
|
need_telegraf_install: false
|
|
when: telegraph_binary_location is defined
|
|
|
|
- name: Check if telegraf is installed
|
|
ansible.builtin.stat:
|
|
path: "{{ telegraph_binary_location }}"
|
|
check_mode: false
|
|
register: telegraf_binary_exists
|
|
when: telegraph_binary_location is defined
|
|
|
|
- name: "set fact: Need telegraf install?"
|
|
ansible.builtin.set_fact:
|
|
need_telegraf_install: true
|
|
check_mode: false
|
|
when:
|
|
- telegraph_binary_location is defined
|
|
- not telegraf_binary_exists.stat.exists
|
|
|
|
- name: Check current version of telegraf
|
|
ansible.builtin.shell: "{{ telegraph_binary_location }} --version | grep -oE '[0-9]+\\.[0-9]+\\.[0-9]+'"
|
|
ignore_errors: true
|
|
register: current_telegraf_version
|
|
check_mode: false
|
|
changed_when: current_telegraf_version.stdout != telegraf_version
|
|
when:
|
|
- telegraph_binary_location is defined
|
|
- not need_telegraf_install
|
|
|
|
- name: "set fact: Need telegraf install?"
|
|
ansible.builtin.set_fact:
|
|
need_telegraf_install: true
|
|
when:
|
|
- telegraph_binary_location is defined
|
|
- not need_telegraf_install
|
|
- current_telegraf_version.stdout != telegraf_version
|
|
|
|
- name: install telegraf (MacOS)
|
|
community.general.homebrew:
|
|
name: telegraf
|
|
state: present
|
|
notify: restart_telegraf
|
|
when:
|
|
- ansible_os_family == 'Darwin'
|
|
- need_telegraf_install
|
|
|
|
- name: install base apt-transport (Debian)
|
|
become: true
|
|
ansible.builtin.apt:
|
|
pkg: apt-transport-https
|
|
state: present
|
|
update_cache: true
|
|
when:
|
|
- ansible_os_family == 'Debian'
|
|
- need_telegraf_install
|
|
|
|
- name: Download telegraf GPG key (Debian)
|
|
become: true
|
|
ansible.builtin.apt_key:
|
|
state: present
|
|
url: "https://repos.influxdata.com/influxdb.key"
|
|
when:
|
|
- ansible_os_family == 'Debian'
|
|
- need_telegraf_install
|
|
|
|
- name: Add telegraf repository to apt (Debian)
|
|
become: true
|
|
ansible.builtin.apt_repository:
|
|
repo: deb https://repos.influxdata.com/debian buster stable
|
|
state: present
|
|
when:
|
|
- ansible_os_family == 'Debian'
|
|
- need_telegraf_install
|
|
|
|
- name: install telegraf (Debian)
|
|
become: true
|
|
ansible.builtin.apt:
|
|
pkg: telegraf
|
|
update_cache: true
|
|
notify: restart_telegraf
|
|
when:
|
|
- ansible_os_family == 'Debian'
|
|
- need_telegraf_install
|
|
|
|
# - name: give telegraf access to docker
|
|
# become: true
|
|
# ansible.builtin.user:
|
|
# name: telegraf
|
|
# groups: docker
|
|
# append: true
|
|
# state: present
|
|
# create_home: false
|
|
# when:
|
|
# - ansible_os_family == 'Debian'
|
|
# - need_telegraf_install
|
|
|
|
# -------------------------------------------------- Add Telegraf Configs
|
|
- name: "Configure Telegraf"
|
|
block:
|
|
- name: "Ensure {{ telegraph_config_location }} exists"
|
|
become: true
|
|
ansible.builtin.file:
|
|
path: "{{ item }}"
|
|
state: directory
|
|
mode: 0755
|
|
loop:
|
|
- "{{ telegraph_config_location }}"
|
|
- "{{ telegraph_config_location }}/telegraf.d"
|
|
|
|
- name: template config files to server
|
|
become: true
|
|
ansible.builtin.template:
|
|
src: "{{ item.src }}"
|
|
dest: "{{ item.dest }}"
|
|
mode: "644"
|
|
loop:
|
|
- { src: "telegraf/base_config.conf.j2", dest: "{{ telegraph_config_location }}/telegraf.conf" }
|
|
- { src: "telegraf/temperature.conf.j2", dest: "{{ telegraph_config_location }}/telegraf.d/temperature.conf" }
|
|
- { src: "telegraf/nomad.conf.j2", dest: "{{ telegraph_config_location }}/telegraf.d/nomad.conf" }
|
|
- { src: "telegraf/docker.conf.j2", dest: "{{ telegraph_config_location }}/telegraf.d/docker.conf" }
|
|
notify: restart_telegraf
|
|
|
|
- name: template leader configs (ie, configs that should be placed on a single server)
|
|
become: true
|
|
ansible.builtin.template:
|
|
src: "{{ item.src }}"
|
|
dest: "{{ item.dest }}"
|
|
mode: "644"
|
|
loop:
|
|
- { src: "telegraf/leader.conf.j2", dest: "{{ telegraph_config_location }}/telegraf.d/leader.conf" }
|
|
- { src: "telegraf/pingHosts.conf.j2", dest: "{{ telegraph_config_location }}/telegraf.d/pingHosts.conf" }
|
|
when:
|
|
- is_cluster_leader
|
|
notify: restart_telegraf
|
|
|
|
- name: Reset file ownership (macOS)
|
|
become: true
|
|
ansible.builtin.file:
|
|
path: "{{ telegraph_config_location }}"
|
|
owner: "{{ ansible_user_uid }}"
|
|
group: "{{ ansible_user_gid }}"
|
|
recurse: true
|
|
when:
|
|
- (ansible_os_family == 'Darwin') or (inventory_hostname == 'synology')
|