From 7b620eadf98cd71195ee2010c724683a84b0fbe5 Mon Sep 17 00:00:00 2001 From: Dale McDiarmid Date: Mon, 18 Jan 2016 14:37:15 +0000 Subject: [PATCH 1/3] Issue 40 + refactoring for better layout and more efficient restart process --- handlers/main.yml | 2 +- tasks/elasticsearch-config.yml | 19 +++++++++++++++---- tasks/elasticsearch-service.yml | 6 ++++++ tasks/elasticsearch.yml | 14 -------------- tasks/main.yml | 6 ++++-- .../helpers/serverspec/standard_spec.rb | 16 ++++++++++++++++ vars/Debian.yml | 1 - vars/RedHat.yml | 1 - vars/main.yml | 3 ++- 9 files changed, 44 insertions(+), 24 deletions(-) create mode 100644 tasks/elasticsearch-service.yml diff --git a/handlers/main.yml b/handlers/main.yml index 45f8a83f..c64fb520 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,4 +1,4 @@ - name: restart elasticsearch service: name={{instance_init_script | basename}} state=restarted enabled=yes - when: es_start_service and (not elasticsearch_started.changed or (plugin_installed is defined and plugin_installed.changed)) \ No newline at end of file + when: es_start_service and (not elasticsearch_started.changed or (plugin_installed is defined and plugin_installed.changed) or elasticsearch_install.changed) diff --git a/tasks/elasticsearch-config.yml b/tasks/elasticsearch-config.yml index 8bc50e3f..b247f63a 100644 --- a/tasks/elasticsearch-config.yml +++ b/tasks/elasticsearch-config.yml @@ -10,10 +10,7 @@ #Relies on elasticsearch distribution installing a serviced script to determine whether one should be copied. -- stat: path={{sysd_script}} - register: systemd_service - -- set_fact: use_system_d={{systemd_service.stat.exists and ((ansible_distribution == 'Debian' and ansible_distribution_version | version_compare('8', '>=')) or (ansible_distribution == 'CentOS' and ansible_distribution_version | version_compare('7', '>=')) or (ansible_distribution == 'Ubuntu' and ansible_distribution_version | version_compare('15', '>='))) }} +- set_fact: use_system_d={{(ansible_distribution == 'Debian' and ansible_distribution_version | version_compare('8', '>=')) or (ansible_distribution == 'CentOS' and ansible_distribution_version | version_compare('7', '>=')) or (ansible_distribution == 'Ubuntu' and ansible_distribution_version | version_compare('15', '>=')) }} - set_fact: instance_sysd_script={{sysd_script | dirname }}/{{es_instance_name}}_{{sysd_script | basename}} when: use_system_d @@ -81,3 +78,17 @@ notify: restart elasticsearch #Clean up un-wanted package scripts to avoid confusion + +- name: Delete Default Init + file: dest=/etc/init.d/elasticsearch state=absent + +- name: Delete Default Environment File + file: dest=/etc/default/elasticsearch state=absent + when: ansible_os_family == 'Debian' + +- name: Delete Default Environment File + file: dest=/etc/sysconfig/elasticsearch state=absent + when: ansible_os_family == 'RedHat' + +- name: Delete Default Sysconfig File + file: dest=/usr/lib/systemd/system/elasticsearch.service state=absent diff --git a/tasks/elasticsearch-service.yml b/tasks/elasticsearch-service.yml new file mode 100644 index 00000000..57a79af9 --- /dev/null +++ b/tasks/elasticsearch-service.yml @@ -0,0 +1,6 @@ +# Make sure the service is started, and restart if necessary +- name: Start elasticsearch service + service: name={{instance_init_script | basename}} state=started enabled=yes + when: es_start_service + register: elasticsearch_started + diff --git a/tasks/elasticsearch.yml b/tasks/elasticsearch.yml index fce9a04b..da6b64ca 100644 --- a/tasks/elasticsearch.yml +++ b/tasks/elasticsearch.yml @@ -16,17 +16,3 @@ - name: Include specific Elasticsearch include: elasticsearch-RedHat.yml when: ansible_os_family == 'RedHat' - -#Configuration file for elasticsearch -- name: Elasticsearch configuration - include: elasticsearch-config.yml - -# Make sure the service is started, and restart if necessary -- name: Start elasticsearch service - service: name={{instance_init_script | basename}} state=started enabled=yes - when: es_start_service - register: elasticsearch_started - -- name: Restart elasticsearch service if new version installed - service: name={{instance_init_script | basename}} state=restarted enabled=yes - when: es_start_service and elasticsearch_install.changed and not elasticsearch_started.changed \ No newline at end of file diff --git a/tasks/main.yml b/tasks/main.yml index e835795d..e021b5d4 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -5,10 +5,12 @@ include_vars: "{{ansible_os_family}}.yml" - include: java.yml - include: elasticsearch.yml -- include: elasticsearch-plugins.yml - when: es_plugins is defined +- include: elasticsearch-config.yml - include: elasticsearch-scripts.yml when: es_scripts +- include: elasticsearch-plugins.yml + when: es_plugins is defined +- include: elasticsearch-service.yml - include: elasticsearch-templates.yml when: es_templates - meta: flush_handlers \ No newline at end of file diff --git a/test/integration/helpers/serverspec/standard_spec.rb b/test/integration/helpers/serverspec/standard_spec.rb index 07e944db..a79fde06 100644 --- a/test/integration/helpers/serverspec/standard_spec.rb +++ b/test/integration/helpers/serverspec/standard_spec.rb @@ -47,5 +47,21 @@ end end + describe file('/etc/init.d/elasticsearch') do + it { should_not exist } + end + + describe file('/etc/default/elasticsearch') do + it { should_not exist } + end + + describe file('/etc/sysconfig/elasticsearch') do + it { should_not exist } + end + + describe file('/usr/lib/systemd/system/elasticsearch.service') do + it { should_not exist } + end + end diff --git a/vars/Debian.yml b/vars/Debian.yml index d0d3da32..6e58b352 100644 --- a/vars/Debian.yml +++ b/vars/Debian.yml @@ -1,5 +1,4 @@ --- java: "openjdk-7-jre-headless" default_file: "/etc/default/elasticsearch" -init_script: "/etc/init.d/elasticsearch" es_home: "/usr/share/elasticsearch" \ No newline at end of file diff --git a/vars/RedHat.yml b/vars/RedHat.yml index 0d8dbbe9..faeec01a 100644 --- a/vars/RedHat.yml +++ b/vars/RedHat.yml @@ -1,5 +1,4 @@ --- java: "java-1.8.0-openjdk.x86_64" default_file: "/etc/sysconfig/elasticsearch" -init_script: "/etc/init.d/elasticsearch" es_home: "/usr/share/elasticsearch" \ No newline at end of file diff --git a/vars/main.yml b/vars/main.yml index b2f74d9a..e22b2cc0 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -1,4 +1,5 @@ --- es_package_url: "https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch" es_conf_dir: "/etc/elasticsearch" -sysd_script: "/usr/lib/systemd/system/elasticsearch.service" \ No newline at end of file +sysd_script: "/usr/lib/systemd/system/elasticsearch.service" +init_script: "/etc/init.d/elasticsearch" \ No newline at end of file From ba8fed00639aee8db61544dbf96a3fbda674ddb4 Mon Sep 17 00:00:00 2001 From: Dale McDiarmid Date: Mon, 18 Jan 2016 14:38:22 +0000 Subject: [PATCH 2/3] Adds support for optional restart on change --- defaults/main.yml | 1 + handlers/main.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/defaults/main.yml b/defaults/main.yml index 22e2c76f..924b2295 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -4,6 +4,7 @@ es_version: "2.1.0" es_version_lock: false es_use_repository: true es_start_service: true +es_restart_on_change: true es_plugins_reinstall: false es_scripts: false es_templates: false diff --git a/handlers/main.yml b/handlers/main.yml index c64fb520..8c6431e5 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,4 +1,4 @@ - name: restart elasticsearch service: name={{instance_init_script | basename}} state=restarted enabled=yes - when: es_start_service and (not elasticsearch_started.changed or (plugin_installed is defined and plugin_installed.changed) or elasticsearch_install.changed) + when: es_restart_on_change and es_start_service and (not elasticsearch_started.changed or (plugin_installed is defined and plugin_installed.changed) or elasticsearch_install.changed) From 183513ecbc348214fceb4f961aaddf5073b3a572 Mon Sep 17 00:00:00 2001 From: Dale McDiarmid Date: Tue, 19 Jan 2016 11:50:02 +0100 Subject: [PATCH 3/3] Minor formatting --- tasks/elasticsearch-plugins.yml | 11 ++++++++++- tasks/elasticsearch.yml | 5 ++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/tasks/elasticsearch-plugins.yml b/tasks/elasticsearch-plugins.yml index 195cc109..28e9ec85 100644 --- a/tasks/elasticsearch-plugins.yml +++ b/tasks/elasticsearch-plugins.yml @@ -1,10 +1,19 @@ --- +#es_plugins_reinstall will be set to true if elasticsearch_install.changed i.e. we have changed ES version +- set_fact: es_plugins_reinstall=true + when: elasticsearch_install.changed + +#List currently installed plugins + + + +#This needs to removed installed plugins not those listed - name: Remove elasticsearch plugins command: "{{es_home}}/bin/plugin remove {{ item.plugin }} --silent" ignore_errors: yes with_items: es_plugins - when: ( ansible_os_family == 'RedHat' or ansible_os_family == 'Debian' ) and es_plugins_reinstall + when: es_plugins_reinstall notify: restart elasticsearch environment: CONF_DIR: "{{ conf_dir }}" diff --git a/tasks/elasticsearch.yml b/tasks/elasticsearch.yml index da6b64ca..5343ff3d 100644 --- a/tasks/elasticsearch.yml +++ b/tasks/elasticsearch.yml @@ -8,7 +8,10 @@ - debug: msg="Node configuration {{ es_config }} " -# Install OS specific elasticsearch - this can be abbreviated in version 2.0.0 +#- name: Include specific Elasticsearch +# include: "elasticsearch-{{ansible_os_family}}.yml" + +#Install OS specific elasticsearch - this can be abbreviated in version 2.0.0 - name: Include specific Elasticsearch include: elasticsearch-Debian.yml when: ansible_os_family == 'Debian'