mirror of
https://github.com/natelandau/ansible-homelab-config.git
synced 2025-11-18 09:53:41 -05:00
277 lines
9.1 KiB
YAML
277 lines
9.1 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: "set variable: Set speedtest download Binary (armv7l)"
|
|
ansible.builtin.set_fact:
|
|
speedtest_download_file_uri: "https://install.speedtest.net/app/cli/ookla-speedtest-{{ speedtest_cli_version }}-linux-armhf.tgz"
|
|
when:
|
|
- ansible_os_family == 'Debian'
|
|
- ansible_architecture == 'armv7l'
|
|
|
|
- name: "set variable: Set speedtest download Binary (aarch64)"
|
|
ansible.builtin.set_fact:
|
|
speedtest_download_file_uri: "https://install.speedtest.net/app/cli/ookla-speedtest-{{ speedtest_cli_version }}-linux-aarch64.tgz"
|
|
when:
|
|
- ansible_os_family == 'Debian'
|
|
- ansible_architecture == 'aarch64'
|
|
|
|
- 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: false
|
|
when:
|
|
- not need_telegraf_install
|
|
- telegraph_binary_location is defined
|
|
|
|
- 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 is version(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
|
|
state: latest
|
|
update_cache: true
|
|
only_upgrade: 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: "Install speedtest"
|
|
when: "'pis' in group_names"
|
|
block:
|
|
- name: "set fact: do we need speedtest installed?"
|
|
ansible.builtin.set_fact:
|
|
need_speedtest_install: false
|
|
|
|
- name: Check if speedtest is installed
|
|
ansible.builtin.stat:
|
|
path: /usr/local/bin/speedtest
|
|
register: speedtest_binary_file_location
|
|
|
|
- name: "set fact: do we need a speedtest install"
|
|
ansible.builtin.set_fact:
|
|
need_speedtest_install: true
|
|
when:
|
|
- not speedtest_binary_file_location.stat.exists
|
|
|
|
- name: Check current version of speedtest
|
|
ansible.builtin.shell: /usr/local/bin/speedtest --version | head -n1 | awk '{print $4}' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+'
|
|
ignore_errors: true
|
|
register: current_speedtest_version
|
|
check_mode: false
|
|
changed_when: false
|
|
when:
|
|
- not need_speedtest_install
|
|
|
|
- name: "set fact: do we need a speedtest install"
|
|
ansible.builtin.set_fact:
|
|
need_speedtest_install: true
|
|
when:
|
|
- not need_speedtest_install
|
|
- current_speedtest_version.stdout is version(speedtest_cli_version, '<')
|
|
|
|
- name: "Install speedtest (pi)"
|
|
become: true
|
|
ansible.builtin.unarchive:
|
|
src: "{{ speedtest_download_file_uri }}"
|
|
dest: /usr/local/bin
|
|
remote_src: true
|
|
when:
|
|
- need_speedtest_install
|
|
- ansible_os_family == 'Debian'
|
|
- ansible_architecture == 'armv7l'
|
|
|
|
- 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/custom_metrics.conf.j2", dest: "{{ telegraph_config_location }}/telegraf.d/custom_metrics.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/speedtest.conf.j2", dest: "{{ telegraph_config_location }}/telegraf.d/speedtest.conf" }
|
|
- { src: "telegraf/pingHosts.conf.j2", dest: "{{ telegraph_config_location }}/telegraf.d/pingHosts.conf" }
|
|
when:
|
|
- is_cluster_leader
|
|
notify: restart_telegraf
|
|
|
|
- name: Copy custom metrics script
|
|
become: true
|
|
ansible.builtin.template:
|
|
src: "scripts/telegraf_custom_metrics.sh.j2"
|
|
dest: "/usr/local/bin/telegraf_custom_metrics.sh"
|
|
mode: 0755
|
|
owner: "{{ ansible_user_uid }}"
|
|
group: "{{ ansible_user_gid }}"
|
|
when:
|
|
- inventory_hostname != 'synology'
|
|
|
|
- name: Copy speedtest script
|
|
become: true
|
|
ansible.builtin.template:
|
|
src: "scripts/telegraf_speedtest.sh.j2"
|
|
dest: "/usr/local/bin/telegraf_speedtest.sh"
|
|
mode: 0755
|
|
owner: "{{ ansible_user_uid }}"
|
|
group: "{{ ansible_user_gid }}"
|
|
when:
|
|
- is_cluster_leader
|
|
|
|
- name: Reset file ownership
|
|
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')
|