Skip to content
This repository was archived by the owner on Jul 26, 2023. It is now read-only.

Commit 5d73cdf

Browse files
committed
Add Elastic Agent
fixes #47
1 parent 74c4a57 commit 5d73cdf

File tree

10 files changed

+164
-2
lines changed

10 files changed

+164
-2
lines changed

.github/workflows/molecule.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ jobs:
1313
runs-on: ubuntu-latest
1414

1515
strategy:
16-
# max-parallel: 4
16+
max-parallel: 4
1717
matrix:
1818
distro: [centos7, debian10, rockylinux8]
19-
scenario: [default]
19+
scenario: [default, agent]
2020
# disabling full stack until Elasticsearch issues are fixed
2121
#scenario: [default, full_stack]
2222

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ You need to have Filebeat available in your software repositories. We provide a
1515
Role Variables
1616
--------------
1717

18+
* *beats_agent*: Use Elastic Agent (Default: `false`)
19+
* *beats_fleet_token*: If you're not using `elastic_stack_full_stack` you have to set this to your Fleet server token when using `beats_agent`
20+
* *beats_fleet_server*: The inventory hostname (and DNS resolvable name) of the fleet server for this host
21+
1822
* *filebeat_enable*: Automatically start Filebeat (Default: `true`)
1923
* *filebeat_output*: Set to `logstash` or `elasticsearch`. (default: `logstash`)
2024
* *filebeat_syslog_udp*: Use UDP Syslog input (Default: `false`)

defaults/main.yml

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
---
22
# defaults file for beats
3+
beats_agent: false
34
beats_filebeat: true
45
filebeat_output: logstash
56
beats_target_hosts:
@@ -37,6 +38,8 @@ filebeat_enable: true
3738
#filebeat_modules:
3839
# - system
3940

41+
beats_fleet_token_name: fleettoken
42+
4043
elastic_stack_full_stack: false
4144
elasticsearch_http_security: false
4245

molecule/agent/INSTALL.rst

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
*******
2+
Docker driver installation guide
3+
*******
4+
5+
Requirements
6+
============
7+
8+
* Docker Engine
9+
10+
Install
11+
=======
12+
13+
Please refer to the `Virtual environment`_ documentation for installation best
14+
practices. If not using a virtual environment, please consider passing the
15+
widely recommended `'--user' flag`_ when invoking ``pip``.
16+
17+
.. _Virtual environment: https://virtualenv.pypa.io/en/latest/
18+
.. _'--user' flag: https://packaging.python.org/tutorials/installing-packages/#installing-to-the-user-site
19+
20+
.. code-block:: bash
21+
22+
$ pip install 'molecule[docker]'

molecule/agent/converge.yml

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
# The workaround for arbitrarily named role directory is important because the
3+
# git repo has one name and the role within it another
4+
# Found at:
5+
# https://github.com/ansible-community/molecule/issues/1567#issuecomment-436876722
6+
- name: Converge
7+
hosts: all
8+
vars:
9+
elastic_stack_full_stack: true
10+
elasticsearch_http_security: true
11+
beats_filebeat: false
12+
beats_metricbeat: false
13+
beats_agent: true
14+
beats_fleet_server: beats-agent
15+
tasks:
16+
- name: "Include Elastics repos role"
17+
include_role:
18+
name: elastic-repos
19+
- name: "Include Elasticsearch role"
20+
include_role:
21+
name: elasticsearch
22+
- name: "Include Beats"
23+
include_role:
24+
name: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') | basename }}"

molecule/agent/molecule.yml

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
dependency:
3+
name: galaxy
4+
driver:
5+
name: docker
6+
platforms:
7+
- name: beats-agent
8+
groups:
9+
- elasticsearch
10+
- logstash
11+
- filebeat
12+
image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible:latest"
13+
command: ${MOLECULE_DOCKER_COMMAND:-""}
14+
volumes:
15+
- /sys/fs/cgroup:/sys/fs/cgroup:ro
16+
privileged: true
17+
pre_build_image: true
18+
provisioner:
19+
name: ansible
20+
verifier:
21+
name: ansible

molecule/agent/prepare.yml

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
- name: Prepare
3+
hosts: all
4+
tasks:
5+
- name: Install git
6+
package:
7+
name: git
8+
when: ansible_os_family != "Debian"
9+
- name: Install packages for Debian
10+
apt:
11+
name:
12+
- git
13+
- gpg
14+
- procps
15+
- curl
16+
update_cache: yes
17+
when: ansible_os_family == "Debian"

molecule/agent/requirements.yml

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
- name: elastic-repos
3+
src: https://github.com/netways/ansible-role-elastic-repos
4+
scm: git
5+
- name: elasticsearch
6+
src: https://github.com/widhalmt/ansible-role-elasticsearch.git
7+
scm: git

tasks/beats-agent.yml

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
---
2+
3+
- name: Check for requirements
4+
fail:
5+
msg: "Needs Token or full stack roles"
6+
when:
7+
- not elastic_stack_full_stack | bool
8+
- beats_fleet_token is undefined
9+
10+
- name: Install Elastic Agent
11+
package:
12+
name: elastic-agent
13+
14+
- name: Generate Fleet Token
15+
block:
16+
17+
- name: Generate Token
18+
shell: >
19+
/usr/share/elasticsearch/bin/elasticsearch-service-tokens
20+
create
21+
elastic/fleet-server
22+
{{ beats_fleet_token_name }} >
23+
/usr/share/elasticsearch/token-{{ beats_fleet_token_name }}
24+
args:
25+
creates: "/usr/share/elasticsearch/token-{{ beats_fleet_token_name }}"
26+
27+
- name: Secure access to token
28+
file:
29+
path: /usr/share/elasticsearch/token-{{ beats_fleet_token_name }}
30+
owner: root
31+
group: root
32+
mode: 0600
33+
34+
- name: Read token
35+
shell: >
36+
grep ^SERVICE_TOKEN
37+
/usr/share/elasticsearch/token-{{ beats_fleet_token_name }} |
38+
cut -d= -f2
39+
changed_when: false
40+
register: read_token
41+
42+
- name: Use token as fact
43+
set_fact:
44+
beats_fleet_token: "{{ read_token.stdout }}"
45+
46+
when: elastic_stack_full_stack | bool
47+
delegate_to: "{{ elasticsearch_ca }}"
48+
49+
- name: Setup fleet server
50+
block:
51+
52+
- name: Run fleet server setup
53+
command: >
54+
elastic-agent
55+
enroll
56+
--insecure
57+
"--fleet-server-service-token={{ beats_fleet_token }}"
58+
--fleet-server-es-ca=/etc/beats/certs/ca.crt
59+
-f --fleet-server-es=https://{{ elasticsearch_ca }}:9200
60+
61+
when: ansible_hostname == beats_fleet_server

tasks/main.yml

+3
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,8 @@
1818
- import_tasks: beats-security.yml
1919
when: elasticsearch_http_security | bool
2020

21+
- import_tasks: beats-agent.yml
22+
when: beats_agent | bool
23+
2124
- import_tasks: filebeat.yml
2225
when: beats_filebeat | bool

0 commit comments

Comments
 (0)