ansible/roles/elasticsearch/tasks/main.yml
---
# Elasticsearch Ansible Tasks
# Configure timezone
- name: Configuring timezone
shell: echo {{ elasticsearch_timezone }} > /etc/timezone; dpkg-reconfigure --frontend noninteractive tzdata
# Update repos
- name: Install python-software-properties
apt: pkg=python-software-properties state=present update_cache=yes cache_valid_time={{apt_cache_valid_time}}
- name: Update repositories
apt_repository: repo={{ item }} state=present update_cache=yes
with_items: elasticsearch_apt_repos
# Accept Oracle license
- name: Accept Oracle license prior JDK installation
shell: echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections; echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections creates=/usr/lib/jvm/java-7-oracle
when: elasticsearch_install_java
# Install Java
- name: Install dependencies
apt: pkg={{elasticsearch_apt_java_package}} state=present
when: elasticsearch_install_java
# Install dependencies
- name: Install dependencies
apt: pkg={{ item }} state=present
with_items: elasticsearch_apt_dependencies
# Configure user and group
- name: Configuring user and group
group: name={{ elasticsearch_group }}
- user: name={{ elasticsearch_user }} group={{ elasticsearch_group }} createhome=no
# Check whether we have aleady installed the same version
- shell: if [ -e /usr/share/elasticsearch/lib/elasticsearch-{{ elasticsearch_version }}.jar ]; then echo yes; else echo no; fi;
register: version_exists
always_run: True
# Download deb if needed
- name: Download Elasticsearch deb
get_url: url={{ elasticsearch_download_url }}/elasticsearch-{{ elasticsearch_version }}.deb dest=/tmp/elasticsearch-{{ elasticsearch_version }}.deb mode=0440
when: version_exists.stdout == 'no'
# Uninstall previous version if applicable
- name: Uninstalling previous version if applicable
shell: dpkg --remove elasticsearch
when: version_exists.stdout == 'no'
- file: path=/usr/share/elasticsearch state=absent
when: version_exists.stdout == 'no'
# Install the deb
- name: Install Elasticsearch deb
shell: dpkg -i -E --force-confnew /tmp/elasticsearch-{{ elasticsearch_version }}.deb
when: version_exists.stdout == 'no'
- file: path=/usr/share/elasticsearch state=directory owner={{ elasticsearch_user }} group={{ elasticsearch_group }} recurse=yes
# Configure directories
- name: Configuring directories
file: path={{ elasticsearch_log_dir }} state=directory owner={{ elasticsearch_user }} group={{ elasticsearch_group }} recurse=yes
when: elasticsearch_log_dir is defined
- file: path={{ elasticsearch_data_dir }} state=directory owner={{ elasticsearch_user }} group={{ elasticsearch_group }} recurse=yes
when: elasticsearch_data_dir is defined
- file: path={{ elasticsearch_work_dir }} state=directory owner={{ elasticsearch_user }} group={{ elasticsearch_group }} recurse=yes
when: elasticsearch_work_dir is defined
- file: path={{ elasticsearch_conf_dir }} state=directory owner={{ elasticsearch_user }} group={{ elasticsearch_group }} recurse=yes
when: elasticsearch_conf_dir is defined
- file: path={{ elasticsearch_plugin_dir }} state=absent
when: elasticsearch_plugin_dir is defined
- file: path={{ elasticsearch_plugin_dir }} state=directory owner={{ elasticsearch_user }} group={{ elasticsearch_group }} recurse=yes
when: elasticsearch_plugin_dir is defined
# Configure open file limits
- name: Configuring open file limits
shell: "echo Configuring open file limits"
- lineinfile: dest=/etc/security/limits.conf regexp='^{{ elasticsearch_user }} - nofile {{ elasticsearch_max_open_files }}' insertafter=EOF line='{{ elasticsearch_user }} - nofile {{ elasticsearch_max_open_files }}'
when: elasticsearch_max_open_files is defined
notify: Restart Elasticsearch
- lineinfile: dest=/etc/security/limits.conf regexp='^{{ elasticsearch_user }} - memlock {{ elasticsearch_max_locked_memory }}' insertafter=EOF line='{{ elasticsearch_user }} - memlock {{ elasticsearch_max_locked_memory }}'
when: elasticsearch_max_locked_memory is defined
notify: Restart Elasticsearch
- lineinfile: dest=/etc/pam.d/su regexp='^session required pam_limits.so' insertafter=EOF line='session required pam_limits.so'
notify: Restart Elasticsearch
- lineinfile: dest=/etc/pam.d/common-session regexp='^session required pam_limits.so' insertafter=EOF line='session required pam_limits.so'
notify: Restart Elasticsearch
- lineinfile: dest=/etc/pam.d/common-session-noninteractive regexp='^session required pam_limits.so' insertafter=EOF line='session required pam_limits.so'
notify: Restart Elasticsearch
- lineinfile: dest=/etc/pam.d/sudo regexp='^session required pam_limits.so' insertafter=EOF line='session required pam_limits.so'
notify: Restart Elasticsearch
- lineinfile: dest=/etc/init.d/elasticsearch regexp='^(DAEMON_OPTS=".*-Des.max-open-files=true")$' insertafter='^(DAEMON_OPTS=".*CONF_DIR")$' line='DAEMON_OPTS="$DAEMON_OPTS -Des.max-open-files=true"'
notify: Restart Elasticsearch
# Install AWS Plugin
- include: aws.yml
when: (elasticsearch_plugin_aws_version is defined)
# Install Other Generic Plugins
- include: plugins.yml
when: (elasticsearch_plugins is defined)
# Install custom JARs
- include: custom-jars.yml
when: (elasticsearch_custom_jars is defined)
# Install Marvel Plugin
- include: marvel.yml
when: (elasticsearch_plugin_marvel_version is defined)
# Configure Elasticsearch Node
- name: Configuring Elasticsearch Node
template: src=elasticsearch.yml.j2 dest={{ elasticsearch_conf_dir }}/elasticsearch.yml owner={{ elasticsearch_user }} group={{ elasticsearch_group }} mode=0644
when: elasticsearch_conf_dir is defined
notify: Restart Elasticsearch
- template: src=elasticsearch.default.j2 dest=/etc/default/elasticsearch owner={{ elasticsearch_user }} group={{ elasticsearch_group }} mode=0644
notify: Restart Elasticsearch
# Register Elasticsearch service to start on boot
- name: Ensure Elasticsearch is started on boot
service: name=elasticsearch enabled={{ elasticsearch_service_startonboot }} state={{ elasticsearch_service_state }}