Merge branch 'master' into AddSSLSupport

This commit is contained in:
Nathan Young 2019-10-11 23:09:03 +01:00
commit 551d93b646
No known key found for this signature in database
GPG key ID: EB5E14327B10D023
25 changed files with 171 additions and 246 deletions

View file

@ -1,4 +1,3 @@
<!
<!-- <!--
** Please read the guidelines below. ** ** Please read the guidelines below. **

35
.github/stale.yml vendored Normal file
View file

@ -0,0 +1,35 @@
---
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 90
# Number of days of inactivity before an stale issue is closed
daysUntilClose: 30
# Label to use when marking an issue as stale
staleLabel: triage/stale
issues:
# Comment to post when marking an issue as stale.
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue.
closeComment: >
This issue has been automatically closed because it has not had recent
activity since being marked as stale.
pulls:
# Comment to post when marking a PR as stale.
markComment: >
This PR has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
To track this PR (even if closed), please open a corresponding issue if one
does not already exist.
# Comment to post when closing a stale PR.
closeComment: >
This PR has been automatically closed because it has not had recent
activity since being marked as stale.
Please reopen when work resumes.

View file

@ -19,7 +19,7 @@ provisioner:
extra_vars: extra_vars:
es_major_version: "<%= ENV['VERSION'] %>" es_major_version: "<%= ENV['VERSION'] %>"
<% if ENV['VERSION'] == '6.x' %> <% if ENV['VERSION'] == '6.x' %>
es_version: '6.8.0' es_version: '6.8.1'
<% end %> <% end %>
<% end %> <% end %>

View file

@ -1,3 +1,27 @@
# Changelog
## 7.4.0 - 2019/10/01
* 7.4.0 as default version
* Remove compatibility with versions < 6.3
| PR | Author | Title |
| ------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------- |
|[#575](https://github.com/elastic/ansible-elasticsearch/pull/575) | [@flyinggecko](https://github.com/flyinggecko) | Fix name of Elasticsearch Ansible role |
|[#578](https://github.com/elastic/ansible-elasticsearch/pull/578) | [@jmlrt](https://github.com/jmlrt) | Fix `dict object has no attribute dict_keys` issue with Python3 |
|[#588](https://github.com/elastic/ansible-elasticsearch/pull/588) | [@broferek](https://github.com/broferek) | Move `userid` and `groupid` in a different place in the role |
|[#591](https://github.com/elastic/ansible-elasticsearch/pull/591) | [@Crazybus](https://github.com/Crazybus) | Add back in `force_basic_auth` for all http requests |
|[#582](https://github.com/elastic/ansible-elasticsearch/pull/582) | [@ktibi](https://github.com/ktibi) | Allow disable Elastic official repository setup |
|[#593](https://github.com/elastic/ansible-elasticsearch/pull/593) | [@jmlrt](https://github.com/jmlrt) | Bunch of small fixes |
|[#595](https://github.com/elastic/ansible-elasticsearch/pull/595) | [@broferek](https://github.com/broferek) | Set `limitMEMLOCK` for OS using Systemd|
|[#600](https://github.com/elastic/ansible-elasticsearch/pull/600) | [@titan-architrave](https://github.com/titan-architrave) | Always gather the `es_major_version` variables|
|[#605](https://github.com/elastic/ansible-elasticsearch/pull/605) | [@jmlrt](https://github.com/jmlrt) | Add doc for migration with data move|
|[#601](https://github.com/elastic/ansible-elasticsearch/pull/601) | [@LukeRoz](https://github.com/LukeRoz) | Removing package version hold when `es_version_hold: false`|
|[#612](https://github.com/elastic/ansible-elasticsearch/pull/612) | [@jmlrt](https://github.com/jmlrt) | Add Probot config to manage stale issues/pr|
|[#614](https://github.com/elastic/ansible-elasticsearch/pull/614) | [@jmlrt](https://github.com/jmlrt) | Describe how to select a different elasticsearch version|
|[#609](https://github.com/elastic/ansible-elasticsearch/pull/609) | [@jmlrt](https://github.com/jmlrt) | No more 6.3 compatibility + Use default files permissions from Elasticsearch package|
|[#510](https://github.com/elastic/ansible-elasticsearch/pull/510) | [@verboEse](https://github.com/verboEse) | Don't fetch APT key if existent|
## 7.1.1 - 2019/06/04 ## 7.1.1 - 2019/06/04
### Breaking changes ### Breaking changes

View file

@ -31,7 +31,7 @@ This role uses the json_query filter which [requires jmespath](https://github.co
Create your Ansible playbook with your own tasks, and include the role elasticsearch. You will have to have this repository accessible within the context of playbook. Create your Ansible playbook with your own tasks, and include the role elasticsearch. You will have to have this repository accessible within the context of playbook.
```sh ```sh
ansible-galaxy install elastic.elasticsearch,7.1.1 ansible-galaxy install elastic.elasticsearch,7.4.0
``` ```
Then create your playbook yaml adding the role elasticsearch. Then create your playbook yaml adding the role elasticsearch.
@ -44,9 +44,15 @@ The simplest configuration therefore consists of:
hosts: localhost hosts: localhost
roles: roles:
- role: elastic.elasticsearch - role: elastic.elasticsearch
vars:
es_version: 7.4.0
``` ```
The above installs a single node 'node1' on the hosts 'localhost'. The above installs Elasticsearch 7.4.0 in a single node 'node1' on the hosts 'localhost'.
**Note**:
Elasticsearch default version is described in [`es_version`](defaults/main.yml#L2). You can override this variable in your playbook to install another version.
While we are testing this role only with one 7.x and one 6.x version (respectively [7.4.0](defaults/main.yml#L2) and [6.8.1](.kitchen.yml#L22) at the time of writing), this role should work with others version also in most cases.
This role also uses [Ansible tags](http://docs.ansible.com/ansible/playbooks_tags.html). Run your playbook with the `--list-tasks` flag for more information. This role also uses [Ansible tags](http://docs.ansible.com/ansible/playbooks_tags.html). Run your playbook with the `--list-tasks` flag for more information.
@ -258,10 +264,6 @@ X-Pack features, such as Security, are supported.
The parameter `es_xpack_features` allows to list xpack features to install (example: `["alerting","monitoring","graph","security","ml"]`). The parameter `es_xpack_features` allows to list xpack features to install (example: `["alerting","monitoring","graph","security","ml"]`).
When the list is empty, it install all features available with the current licence. When the list is empty, it install all features available with the current licence.
The following additional parameters allow X-Pack to be configured:
* ```es_xpack_custom_url``` Url from which X-Pack can be downloaded. This can be used for installations in isolated environments where the elastic.co repo is not accessible. e.g. ```es_xpack_custom_url: "https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-5.5.1.zip"```
* ```es_role_mapping``` Role mappings file declared as yml as described [here](https://www.elastic.co/guide/en/x-pack/current/mapping-roles.html) * ```es_role_mapping``` Role mappings file declared as yml as described [here](https://www.elastic.co/guide/en/x-pack/current/mapping-roles.html)
@ -364,7 +366,7 @@ These can either be set to a user declared in the file based realm, with admin p
In addition to es_config, the following parameters allow the customization of the Java and Elasticsearch versions as well as the role behaviour. Options include: In addition to es_config, the following parameters allow the customization of the Java and Elasticsearch versions as well as the role behaviour. Options include:
* ```es_enable_xpack``` Default `true`. Setting this to `false` will install the oss release of elasticsearch * ```es_enable_xpack``` Default `true`. Setting this to `false` will install the oss release of elasticsearch
* ```es_version``` (e.g. "7.1.1"). * ```es_version``` (e.g. "7.4.0").
* ```es_api_host``` The host name used for actions requiring HTTP e.g. installing templates. Defaults to "localhost". * ```es_api_host``` The host name used for actions requiring HTTP e.g. installing templates. Defaults to "localhost".
* ```es_api_port``` The port used for actions requiring HTTP e.g. installing templates. Defaults to 9200. **CHANGE IF THE HTTP PORT IS NOT 9200** * ```es_api_port``` The port used for actions requiring HTTP e.g. installing templates. Defaults to 9200. **CHANGE IF THE HTTP PORT IS NOT 9200**
* ```es_api_basic_auth_username``` The Elasticsearch username for making admin changing actions. Used if Security is enabled. Ensure this user is admin. * ```es_api_basic_auth_username``` The Elasticsearch username for making admin changing actions. Used if Security is enabled. Ensure this user is admin.

View file

@ -1,5 +1,5 @@
--- ---
es_version: "7.1.1" es_version: "7.4.0"
es_use_snapshot_release: false es_use_snapshot_release: false
es_enable_xpack: true es_enable_xpack: true
es_package_name: "elasticsearch" es_package_name: "elasticsearch"
@ -29,7 +29,7 @@ es_data_dirs:
es_log_dir: "/var/log/elasticsearch" es_log_dir: "/var/log/elasticsearch"
es_action_auto_create_index: true es_action_auto_create_index: true
es_max_open_files: 65536 es_max_open_files: 65536
es_max_threads: "{{ 2048 if ( es_version is version_compare('6.0.0', '<')) else 8192 }}" es_max_threads: 8192
es_max_map_count: 262144 es_max_map_count: 262144
es_allow_downgrades: false es_allow_downgrades: false
es_xpack_features: [] es_xpack_features: []

View file

@ -1,11 +1,12 @@
__author__ = 'dale mcdiarmid' __author__ = "dale mcdiarmid"
import re import re
import os.path import os.path
from six import string_types from six import string_types
def modify_list(values=[], pattern='', replacement='', ignorecase=False):
''' Perform a `re.sub` on every item in the list''' def modify_list(values=[], pattern="", replacement="", ignorecase=False):
""" Perform a `re.sub` on every item in the list"""
if ignorecase: if ignorecase:
flags = re.I flags = re.I
else: else:
@ -13,45 +14,62 @@ def modify_list(values=[], pattern='', replacement='', ignorecase=False):
_re = re.compile(pattern, flags=flags) _re = re.compile(pattern, flags=flags)
return [_re.sub(replacement, value) for value in values] return [_re.sub(replacement, value) for value in values]
def append_to_list(values=[], suffix=''):
def append_to_list(values=[], suffix=""):
if isinstance(values, string_types): if isinstance(values, string_types):
values = values.split(',') values = values.split(",")
return [str(value + suffix) for value in values] return [str(value + suffix) for value in values]
def array_to_str(values=[],separator=','):
def array_to_str(values=[], separator=","):
return separator.join(values) return separator.join(values)
def extract_role_users(users={}, exclude_users=[]): def extract_role_users(users={}, exclude_users=[]):
role_users = [] role_users = []
for user,details in users.iteritems(): for user, details in users.items():
if user not in exclude_users and "roles" in details: if user not in exclude_users and "roles" in details:
for role in details["roles"]: for role in details["roles"]:
role_users.append(role + ":" + user) role_users.append(role + ":" + user)
return role_users return role_users
def filename(filename=''):
def filename(filename=""):
return os.path.splitext(os.path.basename(filename))[0] return os.path.splitext(os.path.basename(filename))[0]
def remove_reserved(user_roles={}): def remove_reserved(user_roles={}):
not_reserved = [] not_reserved = []
for user_role, details in user_roles.items(): for user_role, details in user_roles.items():
if not "metadata" in details or not "_reserved" in details["metadata"] or not details["metadata"]["_reserved"]: if (
not "metadata" in details
or not "_reserved" in details["metadata"]
or not details["metadata"]["_reserved"]
):
not_reserved.append(user_role) not_reserved.append(user_role)
return not_reserved return not_reserved
def filter_reserved(users_role={}): def filter_reserved(users_role={}):
reserved = [] reserved = []
for user_role, details in users_role.items(): for user_role, details in users_role.items():
if "metadata" in details and "_reserved" in details["metadata"] and details["metadata"]["_reserved"]: if (
"metadata" in details
and "_reserved" in details["metadata"]
and details["metadata"]["_reserved"]
):
reserved.append(user_role) reserved.append(user_role)
return reserved return reserved
class FilterModule(object): class FilterModule(object):
def filters(self): def filters(self):
return {'modify_list': modify_list, return {
'append_to_list':append_to_list, "modify_list": modify_list,
'filter_reserved':filter_reserved, "append_to_list": append_to_list,
'array_to_str':array_to_str, "filter_reserved": filter_reserved,
'extract_role_users':extract_role_users, "array_to_str": array_to_str,
'remove_reserved':remove_reserved, "extract_role_users": extract_role_users,
'filename':filename} "remove_reserved": remove_reserved,
"filename": filename,
}

View file

@ -1,7 +1,8 @@
- name: reload systemd configuration - name: reload systemd configuration
become: yes become: yes
command: systemctl daemon-reload systemd:
daemon_reload: true
# Restart service and ensure it is enabled # Restart service and ensure it is enabled

View file

@ -8,31 +8,12 @@
- name: Set the defaults here otherwise they can't be overriden in the same play if the role is called twice - name: Set the defaults here otherwise they can't be overriden in the same play if the role is called twice
set_fact: set_fact:
es_open_xpack: true
es_install_xpack: false
es_users_path: "users"
es_xpack_conf_subdir: ""
es_repo_name: "{{ es_major_version }}" es_repo_name: "{{ es_major_version }}"
es_xpack_users_command: "elasticsearch-users"
es_package_name: "elasticsearch" es_package_name: "elasticsearch"
es_other_package_name: "elasticsearch-oss" es_other_package_name: "elasticsearch-oss"
es_other_repo_name: "{{ 'oss-' + es_major_version }}" es_other_repo_name: "{{ 'oss-' + es_major_version }}"
es_other_apt_url: "deb {{ es_repo_base }}/packages/{{ 'oss-' + es_major_version }}/apt stable main" es_other_apt_url: "deb {{ es_repo_base }}/packages/{{ 'oss-' + es_major_version }}/apt stable main"
- name: Detect if es_version is before X-Pack was open and included
set_fact:
es_open_xpack: false
when: "es_version is version_compare('6.3.0', '<')"
- name: If this is an older version we need to install X-Pack as a plugin and use a different users command
set_fact:
es_install_xpack: true
es_xpack_users_command: "x-pack/users"
es_xpack_conf_subdir: "/x-pack"
when:
- not es_open_xpack
- es_enable_xpack
- name: Use the oss repo and package if xpack is not being used - name: Use the oss repo and package if xpack is not being used
set_fact: set_fact:
es_repo_name: "{{ 'oss-' + es_major_version }}" es_repo_name: "{{ 'oss-' + es_major_version }}"
@ -41,7 +22,6 @@
es_package_name: "elasticsearch-oss" es_package_name: "elasticsearch-oss"
es_other_package_name: "elasticsearch" es_other_package_name: "elasticsearch"
when: when:
- es_open_xpack
- not es_enable_xpack - not es_enable_xpack
- name: Set the URL scheme based if http ssl/tls is enabled - name: Set the URL scheme based if http ssl/tls is enabled

View file

@ -49,6 +49,7 @@
- name: Debian - Add Elasticsearch repository key - name: Debian - Add Elasticsearch repository key
apt_key: apt_key:
url: '{{ es_apt_key }}' url: '{{ es_apt_key }}'
id: '{{ es_apt_key_id }}'
state: present state: present
when: es_add_repository and es_apt_key | string when: es_add_repository and es_apt_key | string
@ -92,7 +93,7 @@
register: debian_elasticsearch_install_from_repo register: debian_elasticsearch_install_from_repo
notify: restart elasticsearch notify: restart elasticsearch
environment: environment:
ES_PATH_CONF: "/etc/elasticsearch" ES_PATH_CONF: "{{ es_conf_dir }}"
- name: Debian - hold elasticsearch version - name: Debian - hold elasticsearch version
become: yes become: yes
@ -112,4 +113,4 @@
register: elasticsearch_install_from_package register: elasticsearch_install_from_package
notify: restart elasticsearch notify: restart elasticsearch
environment: environment:
ES_PATH_CONF: "/etc/elasticsearch" ES_PATH_CONF: "{{ es_conf_dir }}"

View file

@ -52,7 +52,7 @@
retries: 5 retries: 5
delay: 10 delay: 10
environment: environment:
ES_PATH_CONF: "/etc/elasticsearch" ES_PATH_CONF: "{{ es_conf_dir }}"
- name: RedHat - Install Elasticsearch from url - name: RedHat - Install Elasticsearch from url
become: yes become: yes

View file

@ -1,27 +1,35 @@
--- ---
# Configure Elasticsearch Node # Configure Elasticsearch Node
#Create required directories #Create conf directory
- name: Create Directories - name: Create Configuration Directory
become: yes become: yes
file: path={{ item }} state=directory owner={{ es_user }} group={{ es_group }} file: path={{ es_conf_dir }} state=directory owner=root group={{ es_group }} mode=2750
#Create pid directory
- name: Create PID Directory
become: yes
file: path={{ es_pid_dir }} state=directory owner={{ es_user }} group={{ es_group }} mode=0755
#Create required directories
- name: Create Others Directories
become: yes
file: path={{ item }} state=directory owner={{ es_user }} group={{ es_group }} mode=2750
with_items: with_items:
- "{{ es_pid_dir }}"
- "{{ es_log_dir }}" - "{{ es_log_dir }}"
- "{{ es_conf_dir }}"
- "{{ es_data_dirs }}" - "{{ es_data_dirs }}"
#Copy the config template #Copy the config template
- name: Copy Configuration File - name: Copy Configuration File
become: yes become: yes
template: src=elasticsearch.yml.j2 dest={{ es_conf_dir }}/elasticsearch.yml owner={{ es_user }} group={{ es_group }} mode=0644 force=yes template: src=elasticsearch.yml.j2 dest={{ es_conf_dir }}/elasticsearch.yml owner=root group={{ es_group }} mode=0660 force=yes
register: system_change register: system_change
notify: restart elasticsearch notify: restart elasticsearch
#Copy the default file #Copy the default file
- name: Copy Default File - name: Copy Default File
become: yes become: yes
template: src=elasticsearch.j2 dest={{ default_file }} mode=0644 force=yes template: src=elasticsearch.j2 dest={{ default_file }} owner=root group={{ es_group }} mode=0660 force=yes
notify: restart elasticsearch notify: restart elasticsearch
#Copy the systemd specific file if systemd is installed #Copy the systemd specific file if systemd is installed
@ -40,10 +48,10 @@
#Copy the logging.yml #Copy the logging.yml
- name: Copy log4j2.properties File - name: Copy log4j2.properties File
become: yes become: yes
template: src={{ es_config_log4j2 }} dest={{ es_conf_dir }}/log4j2.properties owner={{ es_user }} group={{ es_group }} mode=0644 force=yes template: src={{ es_config_log4j2 }} dest={{ es_conf_dir }}/log4j2.properties owner=root group={{ es_group }} mode=0660 force=yes
notify: restart elasticsearch notify: restart elasticsearch
- name: Copy jvm.options File - name: Copy jvm.options File
become: yes become: yes
template: src=jvm.options.j2 dest={{ es_conf_dir }}/jvm.options owner={{ es_user }} group={{ es_group }} mode=0644 force=yes template: src=jvm.options.j2 dest={{ es_conf_dir }}/jvm.options owner=root group={{ es_group }} mode=0660 force=yes
notify: restart elasticsearch notify: restart elasticsearch

View file

@ -17,7 +17,6 @@
file: file:
dest: "{{ es_home }}/plugins/x-pack" dest: "{{ es_home }}/plugins/x-pack"
state: "absent" state: "absent"
when: es_open_xpack
#List currently installed plugins. We have to list the directories as the list commmand fails if the ES version is different than the plugin version. #List currently installed plugins. We have to list the directories as the list commmand fails if the ES version is different than the plugin version.
- name: Check installed elasticsearch plugins - name: Check installed elasticsearch plugins
@ -80,8 +79,3 @@
until: plugin_installed.rc == 0 until: plugin_installed.rc == 0
retries: 5 retries: 5
delay: 5 delay: 5
#Set permissions on plugins directory
- name: Set Plugin Directory Permissions
become: yes
file: state=directory path={{ es_home }}/plugins owner={{ es_user }} group={{ es_group }} recurse=yes

View file

@ -2,13 +2,14 @@
- name: ensure templates dir is created - name: ensure templates dir is created
file: file:
path: /etc/elasticsearch/templates path: "{{ es_conf_dir }}/templates"
state: directory state: directory
owner: "{{ es_user }}" owner: root
group: "{{ es_group }}" group: "{{ es_group }}"
mode: 2750
- name: Copy templates to elasticsearch - name: Copy templates to elasticsearch
copy: src={{ item }} dest=/etc/elasticsearch/templates owner={{ es_user }} group={{ es_group }} copy: src={{ item }} dest={{ es_conf_dir }}/templates owner=root group={{ es_group }} mode=0660
register: load_templates register: load_templates
with_fileglob: with_fileglob:
- "{{ es_templates_fileglob | default('') }}" - "{{ es_templates_fileglob | default('') }}"

View file

@ -1,68 +0,0 @@
---
#Test if feature is installed
- name: Test if x-pack is installed
shell: "{{es_home}}/bin/elasticsearch-plugin list | grep x-pack"
become: yes
register: x_pack_installed
changed_when: False
failed_when: "'ERROR' in x_pack_installed.stdout"
check_mode: no
ignore_errors: yes
environment:
CONF_DIR: "{{ es_conf_dir }}"
ES_PATH_CONF: "{{ es_conf_dir }}"
ES_INCLUDE: "{{ default_file }}"
#Remove X-Pack if installed and its not been requested or the ES version has changed
- name: Remove x-pack plugin
become: yes
command: "{{es_home}}/bin/elasticsearch-plugin remove x-pack"
register: xpack_state
failed_when: "'ERROR' in xpack_state.stdout"
changed_when: xpack_state.rc == 0
when: x_pack_installed.rc == 0 and (not es_enable_xpack or es_version_changed)
notify: restart elasticsearch
environment:
CONF_DIR: "{{ es_conf_dir }}"
ES_PATH_CONF: "{{ es_conf_dir }}"
ES_INCLUDE: "{{ default_file }}"
#Install plugin if not installed, or the es version has changed (so removed above), and its been requested
- name: Download x-pack from url
get_url: url={{ es_xpack_custom_url }} dest=/tmp/x-pack-{{ es_version }}.zip
when: (x_pack_installed.rc == 1 or es_version_changed) and (es_enable_xpack and es_xpack_custom_url is defined)
- name: Install x-pack plugin from local
become: yes
command: >
{{es_home}}/bin/elasticsearch-plugin install --silent --batch file:///tmp/x-pack-{{ es_version }}.zip
register: xpack_state
changed_when: xpack_state.rc == 0
when: (x_pack_installed.rc == 1 or es_version_changed) and (es_enable_xpack and es_xpack_custom_url is defined)
notify: restart elasticsearch
environment:
CONF_DIR: "{{ es_conf_dir }}"
ES_PATH_CONF: "{{ es_conf_dir }}"
ES_INCLUDE: "{{ default_file }}"
- name: Delete x-pack zip file
file: dest=/tmp/x-pack-{{ es_version }}.zip state=absent
when: es_xpack_custom_url is defined
- name: Install x-pack plugin from elastic.co
become: yes
command: >
{{es_home}}/bin/elasticsearch-plugin install --silent --batch x-pack
register: xpack_state
failed_when: "'ERROR' in xpack_state.stdout"
changed_when: xpack_state.rc == 0
when: (x_pack_installed.rc == 1 or es_version_changed) and (es_enable_xpack and es_xpack_custom_url is not defined)
notify: restart elasticsearch
environment:
CONF_DIR: "{{ es_conf_dir }}"
ES_PATH_CONF: "{{ es_conf_dir }}"
ES_INCLUDE: "{{ default_file }}"
ES_JAVA_OPTS: "{% if es_proxy_host is defined and es_proxy_host != '' %}-Dhttp.proxyHost={{ es_proxy_host }} -Dhttp.proxyPort={{ es_proxy_port }} -Dhttps.proxyHost={{ es_proxy_host }} -Dhttps.proxyPort={{ es_proxy_port }}{% endif %}"

View file

@ -1,24 +1,11 @@
--- ---
- name: set fact es_version_changed
set_fact: es_version_changed={{ ((elasticsearch_install_from_package is defined and (debian_elasticsearch_install_from_repo.changed or redhat_elasticsearch_install_from_repo.changed)) or (elasticsearch_install_from_package is defined and elasticsearch_install_from_package.changed)) }}
- name: include elasticsearch-xpack-install.yml
include: elasticsearch-xpack-install.yml
when: es_install_xpack
#Security configuration #Security configuration
- name: include security/elasticsearch-security.yml - name: include security/elasticsearch-security.yml
include: security/elasticsearch-security.yml include: security/elasticsearch-security.yml
when: es_enable_xpack when: es_enable_xpack
#Add any feature specific configuration here
- name: Set Plugin Directory Permissions
become: yes
file: state=directory path={{ es_home }}/plugins owner={{ es_user }} group={{ es_group }} recurse=yes
#Make sure elasticsearch.keystore has correct Permissions #Make sure elasticsearch.keystore has correct Permissions
- name: Set elasticsearch.keystore Permissions - name: Set elasticsearch.keystore Permissions
become: yes become: yes
file: state=file path={{ es_conf_dir }}/elasticsearch.keystore owner={{ es_user }} group={{ es_group }} file: state=file path={{ es_conf_dir }}/elasticsearch.keystore owner=root group={{ es_group }} mode=0660
when: es_enable_xpack

View file

@ -1,7 +1,10 @@
--- ---
- name: set fact manage_file_users - set_fact: manage_file_users=false
set_fact: manage_file_users=es_users is defined and es_users.file is defined and es_users.file.keys() | list | length > 0
- set_fact: manage_file_users=true
when: es_users is defined and es_users.file is defined and es_users.file.keys() | list | length > 0
# Users migration from elasticsearch < 6.3 versions
- name: Check if old users file exists - name: Check if old users file exists
stat: stat:
path: '{{ es_conf_dir }}/x-pack/users' path: '{{ es_conf_dir }}/x-pack/users'
@ -13,22 +16,16 @@
remote_src: yes remote_src: yes
force: no # only copy it if the new path doesn't exist yet force: no # only copy it if the new path doesn't exist yet
src: "{{ es_conf_dir }}/x-pack/users" src: "{{ es_conf_dir }}/x-pack/users"
dest: "{{ es_conf_dir }}{{ es_xpack_conf_subdir }}/users" dest: "{{ es_conf_dir }}/users"
when: old_users_file.stat.exists
- name: Create the users file if it doesn't exist
copy:
content: ""
dest: "{{ es_conf_dir }}{{ es_xpack_conf_subdir }}/users"
force: no # this ensures it only creates it if it does not exist
group: "{{ es_group }}" group: "{{ es_group }}"
owner: "{{ es_user }}" owner: root
mode: 0555 when: old_users_file.stat.exists
# End of users migrations
#List current users #List current users
- name: List Users - name: List Users
become: yes become: yes
shell: cat {{ es_conf_dir }}{{es_xpack_conf_subdir}}/users | awk -F':' '{print $1}' shell: cat {{ es_conf_dir }}/users | awk -F':' '{print $1}'
register: current_file_users register: current_file_users
when: manage_file_users when: manage_file_users
changed_when: False changed_when: False
@ -42,7 +39,7 @@
- name: Remove Users - name: Remove Users
become: yes become: yes
command: > command: >
{{es_home}}/bin/{{es_xpack_users_command}} userdel {{item}} {{es_home}}/bin/elasticsearch-users userdel {{item}}
with_items: "{{users_to_remove | default([])}}" with_items: "{{users_to_remove | default([])}}"
when: manage_file_users when: manage_file_users
environment: environment:
@ -58,7 +55,7 @@
- name: Add Users - name: Add Users
become: yes become: yes
command: > command: >
{{es_home}}/bin/{{es_xpack_users_command}} useradd {{item}} -p {{es_users.file[item].password}} {{es_home}}/bin/elasticsearch-users useradd {{item}} -p {{es_users.file[item].password}}
with_items: "{{ users_to_add | default([]) }}" with_items: "{{ users_to_add | default([]) }}"
when: manage_file_users when: manage_file_users
no_log: True no_log: True
@ -71,7 +68,7 @@
- name: Set User Passwords - name: Set User Passwords
become: yes become: yes
command: > command: >
{{es_home}}/bin/{{es_xpack_users_command}} passwd {{ item }} -p {{es_users.file[item].password}} {{es_home}}/bin/elasticsearch-users passwd {{ item }} -p {{es_users.file[item].password}}
with_items: "{{ es_users.file.keys() | list }}" with_items: "{{ es_users.file.keys() | list }}"
when: manage_file_users when: manage_file_users
#Currently no easy way to figure out if the password has changed or to know what it currently is so we can skip. #Currently no easy way to figure out if the password has changed or to know what it currently is so we can skip.
@ -89,16 +86,11 @@
#Copy Roles files #Copy Roles files
- name: Copy roles.yml File for Instance - name: Copy roles.yml File for Instance
become: yes become: yes
template: src=security/roles.yml.j2 dest={{ es_conf_dir }}{{es_xpack_conf_subdir}}/roles.yml owner={{ es_user }} group={{ es_group }} mode=0644 force=yes template: src=security/roles.yml.j2 dest={{ es_conf_dir }}/roles.yml owner=root group={{ es_group }} mode=0660 force=yes
when: es_roles is defined and es_roles.file is defined when: es_roles is defined and es_roles.file is defined
#Overwrite users_roles file #Overwrite users_roles file
- name: Copy User Roles - name: Copy User Roles
become: yes become: yes
template: src=security/users_roles.j2 dest={{ es_conf_dir }}{{es_xpack_conf_subdir}}/users_roles mode=0644 force=yes template: src=security/users_roles.j2 dest={{ es_conf_dir }}/users_roles owner=root group={{ es_group }} mode=0660 force=yes
when: manage_file_users and users_roles | length > 0 when: manage_file_users and users_roles | length > 0
#Set permission on security directory. E.g. if 2 nodes are installed on the same machine, the second node will not get the users file created at install, causing the files being created at es_users call and then having the wrong Permissions.
- name: Set Security Directory Permissions Recursive
become: yes
file: state=directory path={{ es_conf_dir }}{{es_xpack_conf_subdir}}/ owner={{ es_user }} group={{ es_group }} recurse=yes

View file

@ -3,12 +3,6 @@
#TODO: 1. Skip users with no password defined or error 2. Passwords | length > 6 #TODO: 1. Skip users with no password defined or error 2. Passwords | length > 6
#Ensure x-pack conf directory is created if necessary
- name: Ensure x-pack conf directory exists (file)
file: path={{ es_conf_dir }}{{ es_xpack_conf_subdir }} state=directory owner={{ es_user }} group={{ es_group }}
changed_when: False
when: (es_users is defined and es_users.file is defined) or (es_roles is defined and es_roles.file is defined) or (es_role_mapping is defined)
#-----------------------------Create Bootstrap User----------------------------------- #-----------------------------Create Bootstrap User-----------------------------------
### START BLOCK elasticsearch keystore ### ### START BLOCK elasticsearch keystore ###
- name: create the elasticsearch keystore - name: create the elasticsearch keystore
@ -52,13 +46,5 @@
#Copy Roles files #Copy Roles files
- name: Copy role_mapping.yml File for Instance - name: Copy role_mapping.yml File for Instance
become: yes become: yes
template: src=security/role_mapping.yml.j2 dest={{ es_conf_dir }}{{es_xpack_conf_subdir}}/role_mapping.yml owner={{ es_user }} group={{ es_group }} mode=0644 force=yes template: src=security/role_mapping.yml.j2 dest={{ es_conf_dir }}/role_mapping.yml owner=root group={{ es_group }} mode=0660 force=yes
when: es_role_mapping is defined when: es_role_mapping is defined
#------------------------------------------------------------------------------------
#Ensure security conf directory is created
- name: Ensure security conf directory exists
become: yes
file: path={{ es_conf_dir }}/security state=directory owner={{ es_user }} group={{ es_group }}
changed_when: False

View file

@ -15,10 +15,6 @@ node.name: {{inventory_hostname}}
# Path to directory containing configuration (this file and logging.yml): # Path to directory containing configuration (this file and logging.yml):
{% if (es_version is version_compare('6.0.0', '<')) %}
path.conf: {{ es_conf_dir }}
{% endif %}
path.data: {{ es_data_dirs | array_to_str }} path.data: {{ es_data_dirs | array_to_str }}
path.logs: {{ es_log_dir }} path.logs: {{ es_log_dir }}

View file

@ -11,23 +11,14 @@ appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n
appender.rolling.type = RollingFile appender.rolling.type = RollingFile
appender.rolling.name = rolling appender.rolling.name = rolling
{% if (es_version is version_compare('6.0.0', '<')) %}
appender.rolling.fileName = ${sys:es.logs}.log
{% else %}
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log
{% endif %}
appender.rolling.layout.type = PatternLayout appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n
{% if (es_version is version_compare('6.0.0', '<')) %}
appender.rolling.filePattern = ${sys:es.logs}-%d{yyyy-MM-dd}.log
{% else %}
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz
{% endif %}
appender.rolling.policies.type = Policies appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1 appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true appender.rolling.policies.time.modulate = true
{% if (es_version is version_compare('6.0.0', '>')) %}
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 128MB appender.rolling.policies.size.size = 128MB
appender.rolling.strategy.type = DefaultRolloverStrategy appender.rolling.strategy.type = DefaultRolloverStrategy
@ -38,25 +29,16 @@ appender.rolling.strategy.action.condition.type = IfFileName
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-* appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-*
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB
{% endif %}
rootLogger.level = info rootLogger.level = info
rootLogger.appenderRef.console.ref = console rootLogger.appenderRef.console.ref = console
rootLogger.appenderRef.rolling.ref = rolling rootLogger.appenderRef.rolling.ref = rolling
appender.deprecation_rolling.type = RollingFile appender.deprecation_rolling.type = RollingFile
appender.deprecation_rolling.name = deprecation_rolling appender.deprecation_rolling.name = deprecation_rolling
{% if (es_version is version_compare('6.0.0', '<')) %}
appender.deprecation_rolling.fileName = ${sys:es.logs}_deprecation.log
{% else %}
appender.deprecation_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.log appender.deprecation_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.log
{% endif %}
appender.deprecation_rolling.layout.type = PatternLayout appender.deprecation_rolling.layout.type = PatternLayout
appender.deprecation_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n appender.deprecation_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n
{% if (es_version is version_compare('6.0.0', '<')) %}
appender.deprecation_rolling.filePattern = ${sys:es.logs}_deprecation-%i.log.gz
{% else %}
appender.deprecation_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation-%i.log.gz appender.deprecation_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation-%i.log.gz
{% endif %}
appender.deprecation_rolling.policies.type = Policies appender.deprecation_rolling.policies.type = Policies
appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.deprecation_rolling.policies.size.size = 1GB appender.deprecation_rolling.policies.size.size = 1GB
@ -70,18 +52,12 @@ logger.deprecation.additivity = false
appender.index_search_slowlog_rolling.type = RollingFile appender.index_search_slowlog_rolling.type = RollingFile
appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling
{% if (es_version is version_compare('6.0.0', '<')) %}
appender.index_search_slowlog_rolling.fileName = ${sys:es.logs}_index_search_slowlog.log appender.index_search_slowlog_rolling.fileName = ${sys:es.logs}_index_search_slowlog.log
{% else %}
appender.index_search_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_search_slowlog.log appender.index_search_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_search_slowlog.log
{% endif %}
appender.index_search_slowlog_rolling.layout.type = PatternLayout appender.index_search_slowlog_rolling.layout.type = PatternLayout
appender.index_search_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.-10000m%n appender.index_search_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.-10000m%n
{% if (es_version is version_compare('6.0.0', '<')) %}
appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs}_index_search_slowlog-%d{yyyy-MM-dd}.log appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs}_index_search_slowlog-%d{yyyy-MM-dd}.log
{% else %}
appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_search_slowlog-%d{yyyy-MM-dd}.log appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_search_slowlog-%d{yyyy-MM-dd}.log
{% endif %}
appender.index_search_slowlog_rolling.policies.type = Policies appender.index_search_slowlog_rolling.policies.type = Policies
appender.index_search_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy appender.index_search_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.index_search_slowlog_rolling.policies.time.interval = 1 appender.index_search_slowlog_rolling.policies.time.interval = 1
@ -94,18 +70,10 @@ logger.index_search_slowlog_rolling.additivity = false
appender.index_indexing_slowlog_rolling.type = RollingFile appender.index_indexing_slowlog_rolling.type = RollingFile
appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling
{% if (es_version is version_compare('6.0.0', '<')) %}
appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs}_index_indexing_slowlog.log
{% else %}
appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_indexing_slowlog.log appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_indexing_slowlog.log
{% endif %}
appender.index_indexing_slowlog_rolling.layout.type = PatternLayout appender.index_indexing_slowlog_rolling.layout.type = PatternLayout
appender.index_indexing_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.-10000m%n appender.index_indexing_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.-10000m%n
{% if (es_version is version_compare('6.0.0', '<')) %}
appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs}_index_indexing_slowlog-%d{yyyy-MM-dd}.log
{% else %}
appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_indexing_slowlog-%d{yyyy-MM-dd}.log appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_indexing_slowlog-%d{yyyy-MM-dd}.log
{% endif %}
appender.index_indexing_slowlog_rolling.policies.type = Policies appender.index_indexing_slowlog_rolling.policies.type = Policies
appender.index_indexing_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy appender.index_indexing_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.index_indexing_slowlog_rolling.policies.time.interval = 1 appender.index_indexing_slowlog_rolling.policies.time.interval = 1

View file

@ -3,11 +3,11 @@ require 'spec_helper'
shared_examples 'oss::init' do |vars| shared_examples 'oss::init' do |vars|
describe file("/etc/elasticsearch/log4j2.properties") do describe file("/etc/elasticsearch/log4j2.properties") do
it { should be_file } it { should be_file }
it { should be_owned_by 'elasticsearch' } it { should be_owned_by 'root' }
it { should_not contain 'CUSTOM LOG4J FILE' } it { should_not contain 'CUSTOM LOG4J FILE' }
end end
describe file("/etc/elasticsearch/jvm.options") do describe file("/etc/elasticsearch/jvm.options") do
it { should be_file } it { should be_file }
it { should be_owned_by vars['es_user'] } it { should be_owned_by 'root' }
end end
end end

View file

@ -108,11 +108,11 @@ shared_examples 'shared::init' do |vars|
if vars['es_templates'] if vars['es_templates']
describe file('/etc/elasticsearch/templates') do describe file('/etc/elasticsearch/templates') do
it { should be_directory } it { should be_directory }
it { should be_owned_by vars['es_user'] } it { should be_owned_by 'root' }
end end
describe file('/etc/elasticsearch/templates/basic.json') do describe file('/etc/elasticsearch/templates/basic.json') do
it { should be_file } it { should be_file }
it { should be_owned_by vars['es_user'] } it { should be_owned_by 'root' }
end end
#This is possibly subject to format changes in the response across versions so may fail in the future #This is possibly subject to format changes in the response across versions so may fail in the future
describe 'Template Contents Correct' do describe 'Template Contents Correct' do
@ -138,7 +138,7 @@ shared_examples 'shared::init' do |vars|
name = plugin['plugin'] name = plugin['plugin']
describe file('/usr/share/elasticsearch/plugins/'+name) do describe file('/usr/share/elasticsearch/plugins/'+name) do
it { should be_directory } it { should be_directory }
it { should be_owned_by vars['es_user'] } it { should be_owned_by 'root' }
end end
it 'should be installed and the right version' do it 'should be installed and the right version' do
plugins = curl_json("#{es_api_url}/_nodes/plugins", username=username, password=password) plugins = curl_json("#{es_api_url}/_nodes/plugins", username=username, password=password)
@ -152,6 +152,7 @@ shared_examples 'shared::init' do |vars|
end end
end end
describe file("/etc/elasticsearch/elasticsearch.yml") do describe file("/etc/elasticsearch/elasticsearch.yml") do
it { should be_owned_by 'root' }
it { should contain "node.name: localhost" } it { should contain "node.name: localhost" }
it { should contain 'cluster.name: elasticsearch' } it { should contain 'cluster.name: elasticsearch' }
it { should_not contain "path.conf: /etc/elasticsearch" } it { should_not contain "path.conf: /etc/elasticsearch" }

View file

@ -4,14 +4,14 @@ vars = JSON.parse(File.read('/tmp/vars.json'))
shared_examples 'xpack_upgrade::init' do |vars| shared_examples 'xpack_upgrade::init' do |vars|
#Test users file, users_roles and roles.yml #Test users file, users_roles and roles.yml
describe file("/etc/elasticsearch/#{vars['es_xpack_conf_subdir']}/users_roles") do describe file("/etc/elasticsearch/users_roles") do
it { should be_owned_by 'elasticsearch' } it { should be_owned_by 'root' }
it { should contain 'admin:es_admin' } it { should contain 'admin:es_admin' }
it { should contain 'power_user:testUser' } it { should contain 'power_user:testUser' }
end end
describe file("/etc/elasticsearch/#{vars['es_xpack_conf_subdir']}/users") do describe file("/etc/elasticsearch/users") do
it { should be_owned_by 'elasticsearch' } it { should be_owned_by 'root' }
it { should contain 'testUser:' } it { should contain 'testUser:' }
it { should contain 'es_admin:' } it { should contain 'es_admin:' }
end end
@ -36,8 +36,8 @@ shared_examples 'xpack_upgrade::init' do |vars|
end end
#Test contents of role_mapping.yml #Test contents of role_mapping.yml
describe file("/etc/elasticsearch/#{vars['es_xpack_conf_subdir']}/role_mapping.yml") do describe file("/etc/elasticsearch/role_mapping.yml") do
it { should be_owned_by 'elasticsearch' } it { should be_owned_by 'root' }
it { should contain 'power_user:' } it { should contain 'power_user:' }
it { should contain '- cn=admins,dc=example,dc=com' } it { should contain '- cn=admins,dc=example,dc=com' }
it { should contain 'user:' } it { should contain 'user:' }

View file

@ -7,5 +7,4 @@
roles: roles:
- elasticsearch - elasticsearch
vars: vars:
es_xpack_custom_url: "https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-{{ es_version }}.zip"
es_heap_size: 2g es_heap_size: 2g

View file

@ -2,3 +2,4 @@
java: "{% if es_java is defined %}{{es_java}}{% else %}openjdk-8-jre-headless{% endif %}" java: "{% if es_java is defined %}{{es_java}}{% else %}openjdk-8-jre-headless{% endif %}"
default_file: "/etc/default/elasticsearch" default_file: "/etc/default/elasticsearch"
es_home: "/usr/share/elasticsearch" es_home: "/usr/share/elasticsearch"
es_apt_key_id: "46095ACC8548582C1A2699A9D27D666CD88E42B4"