--- # 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: "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: - 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 is version(telegraf_version, '<') - ansible.builtin.debug: msg: "Current telegraf version {{ current_telegraf_version.stdout }} is lower than specified {{ telegraf_version }}" when: - telegraph_binary_location is defined - 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')