diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e75d7a..df21779 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +## 6.6.0 - 2019/01/29 + +### Features + +* 6.6.0 as default Elasticsearch version +* [#521](https://github.com/elastic/ansible-elasticsearch/pull/521) - @Crazybus - Allow switching between oss and standard packages +* [#528](https://github.com/elastic/ansible-elasticsearch/pull/528) - @Fra-nk - Use systemd's RequiresMountsFor +* [#530](https://github.com/elastic/ansible-elasticsearch/pull/530) - @lde - Use dpkg_selections to lock elasticsearch version + +### Fixes + +* [#513](https://github.com/elastic/ansible-elasticsearch/pull/513) - @kakoni - Fix typo in elasticsearch-parameters.yml +* [#522](https://github.com/elastic/ansible-elasticsearch/pull/522) - @SlothOfAnarchy - Fix package download URL +* [#526](https://github.com/elastic/ansible-elasticsearch/pull/527) - @Fra-nk - Allow not installing Elasticsearch deb repository key +* [#527](https://github.com/elastic/ansible-elasticsearch/pull/527) - @katsukamaru - Execute java version check in check mode + ## 6.5.1.1 - 2018/11/27 ### Fixes diff --git a/defaults/main.yml b/defaults/main.yml index 91177cb..4b35fde 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,6 +1,6 @@ --- es_major_version: "6.x" -es_version: "6.5.1" +es_version: "6.6.0" es_use_snapshot_release: false es_enable_xpack: true es_package_name: "elasticsearch" diff --git a/tasks/compatibility-variables.yml b/tasks/compatibility-variables.yml index b5cf31c..d37468d 100644 --- a/tasks/compatibility-variables.yml +++ b/tasks/compatibility-variables.yml @@ -14,6 +14,9 @@ es_xpack_conf_subdir: "" es_repo_name: "{{ es_major_version }}" es_xpack_users_command: "elasticsearch-users" + es_other_package_name: "elasticsearch-oss" + es_other_repo_name: "{{ 'oss-' + es_major_version }}" + es_other_apt_url: "deb https://artifacts.elastic.co/packages/{{ 'oss-' + es_major_version }}/apt stable main" - name: Detect if es_version is before X-Pack was open and included set_fact: @@ -32,7 +35,10 @@ - name: Use the oss repo and package if xpack is not being used set_fact: es_repo_name: "{{ 'oss-' + es_major_version }}" + es_other_repo_name: "{{ es_major_version }}" + es_other_apt_url: "deb https://artifacts.elastic.co/packages/{{ es_major_version }}/apt stable main" es_package_name: "elasticsearch-oss" + es_other_package_name: "elasticsearch" when: - es_open_xpack - not es_enable_xpack diff --git a/tasks/elasticsearch-Debian-version-lock.yml b/tasks/elasticsearch-Debian-version-lock.yml index 4ca9b24..6d52493 100644 --- a/tasks/elasticsearch-Debian-version-lock.yml +++ b/tasks/elasticsearch-Debian-version-lock.yml @@ -1,6 +1,6 @@ --- - name: Debian - hold elasticsearch version become: yes - command: "apt-mark hold {{ es_package_name }}" - register: hold_elasticsearch_result - changed_when: "hold_elasticsearch_result.stdout != '{{ es_package_name }} was already set on hold.'" + dpkg_selections: + name: "{{ es_package_name }}" + selection: "hold" diff --git a/tasks/elasticsearch-Debian.yml b/tasks/elasticsearch-Debian.yml index fc2bcec..7b9a735 100644 --- a/tasks/elasticsearch-Debian.yml +++ b/tasks/elasticsearch-Debian.yml @@ -7,49 +7,53 @@ set_fact: force_install=yes when: es_allow_downgrades -- name: Debian - Install apt-transport-https to support https APT downloads +- name: Gracefully stop and remove elasticsearch package if switching between OSS and standard become: yes - apt: name=apt-transport-https state=present - when: es_use_repository - -- name: Debian - Add Elasticsearch repository key - become: yes - apt_key: url="{{ es_apt_key }}" state=present - when: es_use_repository and es_apt_key - -- name: Debian - Add elasticsearch repository - become: yes - apt_repository: repo={{ item.repo }} state={{ item.state}} - with_items: - - { repo: "{{ es_apt_url_old }}", state: "absent" } - - { repo: "{{ es_apt_url }}", state: "present" } - when: es_use_repository - - -- name: Gracefully stop and remove elasticsearch if we are switching to the oss version - when: - - es_package_name == 'elasticsearch-oss' block: - name: Check if the elasticsearch package is installed - shell: dpkg-query -W -f'${Status}' elasticsearch + shell: "dpkg-query -W -f'${Status}' {{ es_other_package_name }}" register: elasticsearch_package failed_when: False changed_when: False - name: stop elasticsearch - become: yes service: name: '{{ instance_init_script | basename }}' state: stopped when: elasticsearch_package.stdout == 'install ok installed' - - name: Debian - Remove elasticsearch package if we are installing the oss package - become: yes + - name: Debian - Remove elasticsearch package if we are switching to a different package type apt: - name: 'elasticsearch' + name: '{{ es_other_package_name }}' state: absent when: elasticsearch_package.stdout == 'install ok installed' + +- name: Install Elasticsearch repository + when: es_use_repository + become: yes + block: + - name: Debian - Install apt-transport-https to support https APT downloads + apt: + name: apt-transport-https + state: present + + - name: Debian - Add Elasticsearch repository key + apt_key: + url: '{{ es_apt_key }}' + state: present + when: es_apt_key | string + + - name: Debian - Add elasticsearch repository + apt_repository: + repo: '{{ item.repo }}' + state: '{{ item.state }}' + with_items: + - { repo: "{{ es_apt_url_old }}", state: "absent" } + - { repo: "{{ es_apt_url }}", state: "present" } + - { repo: "{{ es_other_apt_url }}", state: "absent" } + + - name: Debian - Ensure elasticsearch is installed become: yes apt: diff --git a/tasks/elasticsearch-RedHat.yml b/tasks/elasticsearch-RedHat.yml index a57ab71..c872fc3 100644 --- a/tasks/elasticsearch-RedHat.yml +++ b/tasks/elasticsearch-RedHat.yml @@ -13,19 +13,27 @@ - name: RedHat - add Elasticsearch repo become: yes - template: src=elasticsearch.repo dest=/etc/yum.repos.d/elasticsearch-{{ es_repo_name }}.repo + template: + src: 'elasticsearch.repo' + dest: '/etc/yum.repos.d/elasticsearch-{{ es_repo_name }}.repo' + when: es_use_repository + +- name: RedHat - remove unused Elasticsearch repo + become: yes + file: + path: '/etc/yum.repos.d/elasticsearch-{{ es_other_repo_name }}.repo' + state: absent when: es_use_repository - name: RedHat - include versionlock include: elasticsearch-RedHat-version-lock.yml when: es_version_lock -- name: RedHat - Remove non oss package if the old elasticsearch package is installed +- name: RedHat - Remove the other elasticsearch package if switching between OSS and standard become: yes yum: - name: 'elasticsearch' + name: '{{ es_other_package_name }}' state: 'absent' - when: es_package_name == 'elasticsearch-oss' - name: RedHat - Install Elasticsearch become: yes diff --git a/tasks/elasticsearch-parameters.yml b/tasks/elasticsearch-parameters.yml index dc8a177..df1ba0e 100644 --- a/tasks/elasticsearch-parameters.yml +++ b/tasks/elasticsearch-parameters.yml @@ -71,5 +71,5 @@ set_fact: pid_dir={{ es_pid_dir }}/{{instance_suffix}} - name: set fact log_dir set_fact: log_dir={{ es_log_dir }}/{{instance_suffix}} -- name: set fact log_dir +- name: set fact data_dirs set_fact: data_dirs={{ es_data_dirs | append_to_list('/'+instance_suffix) }} diff --git a/tasks/java.yml b/tasks/java.yml index a7174da..68abc53 100644 --- a/tasks/java.yml +++ b/tasks/java.yml @@ -18,6 +18,7 @@ register: java_full_path failed_when: False changed_when: False + check_mode: no when: ansible_os_family == 'RedHat' - name: correct java version selected diff --git a/templates/systemd/elasticsearch.j2 b/templates/systemd/elasticsearch.j2 index a1747d0..cd7366b 100644 --- a/templates/systemd/elasticsearch.j2 +++ b/templates/systemd/elasticsearch.j2 @@ -3,6 +3,8 @@ Description=Elasticsearch-{{es_instance_name}} Documentation=http://www.elastic.co Wants=network-online.target After=network-online.target +{# Directive 'WorkingDirectory' creates an implicit dependecy for {{es_home}}, so it can be omitted here #} +RequiresMountsFor={{ data_dirs | array_to_str(separator=' ') }} {{log_dir}} {{pid_dir}} {{conf_dir}} [Service] Environment=ES_HOME={{es_home}} diff --git a/test/integration/helpers/serverspec/shared_spec.rb b/test/integration/helpers/serverspec/shared_spec.rb index d707cde..eca6682 100644 --- a/test/integration/helpers/serverspec/shared_spec.rb +++ b/test/integration/helpers/serverspec/shared_spec.rb @@ -167,4 +167,29 @@ shared_examples 'shared::init' do |vars| its(:content) { should match "path.data: #{vars['data_dirs'].join(',')}" } its(:content) { should match "path.logs: /var/log/elasticsearch/localhost-#{vars['es_instance_name']}" } end + + if vars['es_use_repository'] + if vars['ansible_os_family'] == 'RedHat' + describe file("/etc/yum.repos.d/elasticsearch-#{vars['es_repo_name']}.repo") do + it { should exist } + end + describe yumrepo("elasticsearch-#{vars['es_repo_name']}") do + it { should exist } + it { should be_enabled } + end + describe file("/etc/yum.repos.d/elasticsearch-#{vars['es_other_repo_name']}.repo") do + it { should_not exist } + end + describe yumrepo("elasticsearch-#{vars['es_other_repo_name']}") do + it { should_not exist } + it { should_not be_enabled } + end + end + if vars['ansible_os_family'] == 'Debian' + describe command('apt-cache policy') do + its(:stdout) { should match /elastic.co.*\/#{Regexp.quote(vars['es_repo_name'])}\//} + its(:stdout) { should_not match /elastic.co.*\/#{Regexp.quote(vars['es_other_repo_name'])}\//} + end + end + end end