From 59b3613fe18844a064fb1f943860e371a169b86b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl=20B=C3=A4ckstr=C3=B6m?= Date: Sat, 23 May 2020 18:29:55 +0200 Subject: [PATCH] Deployment for MacOS --- defaults/main.yml | 3 + handlers/main.yml | 3 + meta/main.yml | 3 + tasks/MacOS.yml | 14 +++++ tasks/configure_macos.yml | 128 ++++++++++++++++++++++++++++++++++++++ tasks/main.yml | 12 +++- 6 files changed, 162 insertions(+), 1 deletion(-) create mode 100644 tasks/MacOS.yml create mode 100644 tasks/configure_macos.yml diff --git a/defaults/main.yml b/defaults/main.yml index 5b0d266..936fc50 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -82,3 +82,6 @@ telegraf_win_service_args: - -service install - -config {{ telegraf_win_install_dir }}\telegraf\telegraf.conf - --config-directory {{ telegraf_win_include }} + +telegraf_mac_user: user +telegraf_mac_group: admin diff --git a/handlers/main.yml b/handlers/main.yml index 21473c4..fd3ddbd 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -20,3 +20,6 @@ name: Telegraf start_mode: auto state: restarted + +- name: "Restart MacOS Telegraf" + shell: brew services restart telegraf diff --git a/meta/main.yml b/meta/main.yml index 9ed28c1..6c0fa60 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -22,6 +22,9 @@ galaxy_info: - name: Windows versions: - all + - name: MacOS + versions: + - all galaxy_tags: - monitoring diff --git a/tasks/MacOS.yml b/tasks/MacOS.yml new file mode 100644 index 0000000..e4ff34b --- /dev/null +++ b/tasks/MacOS.yml @@ -0,0 +1,14 @@ +--- +# description: MacOS specific installation + +- name: "MacOS | set package name" + set_fact: + telegraf_agent_package: telegraf + +- name: "MacOS | Install Telegraf package" + package: + name: "{{ telegraf_agent_package }}" + state: "{{ telegraf_agent_package_state }}" + register: is_telegraf_package_installed + until: is_telegraf_package_installed is succeeded + notify: "Restart Telegraf" diff --git a/tasks/configure_macos.yml b/tasks/configure_macos.yml new file mode 100644 index 0000000..45909b0 --- /dev/null +++ b/tasks/configure_macos.yml @@ -0,0 +1,128 @@ +--- +# description: Configure telegraf and get all relevent ec2 information + +- name: Retrieve ec2 facts + ec2_metadata_facts: + when: + - telegraf_agent_aws_tags + +- name: "Add prefix path" + set_fact: + telegraf_agent_config_path: /usr/local/etc + when: + - ansible_os_family in ["FreeBSD", "Darwin"] + +- 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_mac_user }}" + group: "{{ telegraf_mac_group }}" + mode: 0640 + become: yes + when: + - telegraf_agent_version is version_compare('0.10.0', '<') + notify: + - Restart Telegraf + - Restart Telegraf container + +- name: "Copy the template for versions >= 0.10.0" + template: + src: telegraf.conf.j2 + dest: "{{ telegraf_agent_config_path }}/telegraf.conf" + owner: "{{ telegraf_mac_user }}" + group: "{{ telegraf_mac_group }}" + mode: 0640 + become: yes + when: + - telegraf_agent_version is version_compare('0.10.0', '>=') + notify: + - Restart MacOS Telegraf + - Restart Telegraf container + +- name: "Check if extra plugins directory exists in case of exclusive" + stat: + path: "{{ telegraf_agent_config_path }}/telegraf.d" + register: telegraf_directory + when: + - telegraf_plugins_extra_exclusive + +- name: "Delete telegraf extra plugin path" + file: + state: absent + path: "{{ telegraf_agent_config_path }}/telegraf.d/" + when: + - telegraf_plugins_extra_exclusive + - telegraf_directory.stat.exists + become: yes + notify: + - Restart MacOS Telegraf + - Restart Telegraf container + +- name: "Create telegraf extra plugin path" + file: + state: directory + path: "{{ telegraf_agent_config_path }}/telegraf.d/" + owner: "{{ telegraf_mac_user }}" + group: "{{ telegraf_mac_group }}" + mode: 0755 + when: + - telegraf_plugins_extra_exclusive + - telegraf_directory.stat.exists + become: yes + notify: + - Restart MacOS Telegraf + - Restart Telegraf container + +- name: "Copy telegraf extra plugins" + template: + src: "telegraf-extra-plugin.conf.j2" + dest: "{{ telegraf_agent_config_path }}/telegraf.d/{{ item.key }}.conf" + owner: "{{ telegraf_mac_user }}" + group: "{{ telegraf_mac_group }}" + 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 MacOS Telegraf + - Restart Telegraf container + +- name: "Remove telegraf extra plugins" + file: + path: "{{ telegraf_agent_config_path }}/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 MacOS Telegraf + - Restart Telegraf container + +- name: "Force restart service after reread config" + meta: flush_handlers + +- name: "Start Telegraf (If it wasn't running)" + shell: brew services start telegraf + register: brew_services_start_telegraf + changed_when: '"Successfully started `telegraf`" in brew_services_start_telegraf.stdout' + when: not telegraf_agent_docker diff --git a/tasks/main.yml b/tasks/main.yml index afff3de..f0f8eb0 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -23,15 +23,25 @@ when: - ansible_os_family == "FreeBSD" and not telegraf_agent_docker +- name: "Install on MacOS" + include_tasks: "MacOS.yml" + when: + - ansible_os_family == "Darwin" and not telegraf_agent_docker + - include_tasks: "docker.yml" when: telegraf_agent_docker - name: "Configure Telegraf" include_tasks: "configure_linux.yml" when: - - ansible_os_family != "Windows" + - ansible_os_family not in ['Windows', 'Darwin'] - name: "Install / Configure telegraf on Windows" include_tasks: "configure_windows.yml" when: - ansible_os_family == "Windows" and not telegraf_agent_docker + +- name: "Install / Configure telegraf on MacOS" + include_tasks: "configure_macos.yml" + when: + - ansible_os_family == "Darwin" and not telegraf_agent_docker