ScienceToolbox/sciencetoolbox

View on GitHub
ansible/roles/elasticsearch/tasks/main.yml

Summary

Maintainability
Test Coverage
---
# 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 }}