Skip to content

Commit

Permalink
Install specific version of Erlang from ESL
Browse files Browse the repository at this point in the history
The RabbitMQ community and project recommend erlang 19.3.x for the best,
most stable, results. This change downloads the recommended version of
erlang [ https://www.rabbitmq.com/which-erlang.html ] from ESL and moves
the erlang packages for distros into a specific list installed only when
the ``rabbitmq_install_method`` variable is not set to "file".

Backport notes:
- Includes adjustments made in https://review.openstack.org/492824
  in order to prevent a regression in configurability.
- Further adjustments have been made to compensate for the differences
  in behaviour when using Ansible 2.1.
- Include https://review.openstack.org/484910

Change-Id: Ief57b1fdcb791f0f8ed20c1cbb54ea19d4373f81
Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
(cherry picked from commit cd9ed8e)
  • Loading branch information
cloudnull authored and Jesse Pretorius (odyssey4me) committed Aug 30, 2017
1 parent fd17f99 commit 4eb83b1
Show file tree
Hide file tree
Showing 7 changed files with 199 additions and 119 deletions.
6 changes: 6 additions & 0 deletions defaults/main.yml
Expand Up @@ -47,6 +47,12 @@ rabbitmq_repo_url: "{{ _rabbitmq_repo_url }}"
# Set the repo information for the RabbitMQ repository
rabbitmq_repo: "{{ _rabbitmq_repo }}"

# Set the URL for the Erlang repository
rabbitmq_erlang_repo_url: "{{ _rabbitmq_erlang_repo_url }}"

# Set the repo information for the Erlang repository
rabbitmq_erlang_repo: "{{ _rabbitmq_erlang_repo }}"

# Choose file, distro, external_repo for rabbitmq_install_method.
rabbitmq_install_method: "file"

Expand Down
5 changes: 5 additions & 0 deletions meta/main.yml
Expand Up @@ -35,5 +35,10 @@ galaxy_info:
dependencies:
- pip_install
- role: apt_package_pinning
apt_package_pinning_file_name: "rabbitmq.pref"
apt_package_pinning_priority: 999
apt_pinned_packages:
- package: "*"
release: "Erlang Solutions Ltd."
when:
- ansible_pkg_mgr == 'apt'
25 changes: 25 additions & 0 deletions releasenotes/notes/esl-repo-6ff0c7f24ad2a043.yaml
@@ -0,0 +1,25 @@
---
features:
- A new repository for installing modern erlang from ESL
(erlang solutions) has been added giving us the ability
to install and support modern stable erlang over numerous
operating systems.
- The ability to set the RabbitMQ repo URL for both erlang
and RabbitMQ itself has been added. This has been done to
allow deployers to define the location of a given repo without
having to fully redefine the entire set of definitions for a
specific repository. The default variables `rabbitmq_gpg_keys`,
`rabbitmq_repo_url`, and `rabbitmq_erlang_repo_url` have been
created to facilitate this capability.
upgrade:
- Changing to the ESL repos has no upgrade impact. The version
of erlang provided by ESL is newer than that what is found in
the distro repos. Furthermore, a pin has been added to
ensure that APT always uses the ESL repos as it's preferred
source which has been done to simply ensure APT is always
pointed at ESL.
fixes:
- Based on documentation from RabbitMQ
[ https://www.rabbitmq.com/which-erlang.html ] this change
ensures the version of erlang we're using across distros is
consistent and supported by RabbitMQ.
119 changes: 67 additions & 52 deletions tasks/install_apt.yml
Expand Up @@ -13,6 +13,65 @@
# See the License for the specific language governing permissions and
# limitations under the License.

- block:
- name: Add rabbitmq apt-keys
apt_key:
id: "{{ item.hash_id }}"
keyserver: "{{ item.keyserver | default(omit) }}"
data: "{{ item.data | default(omit) }}"
url: "{{ item.url | default(omit) }}"
state: "present"
register: add_keys
until: add_keys | success
retries: 5
delay: 2
with_items: "{{ rabbitmq_gpg_keys }}"
tags:
- rabbitmq-apt-keys

rescue:
- name: Add rabbitmq apt-keys using fallback keyserver
apt_key:
id: "{{ item.hash_id }}"
keyserver: "{{ item.fallback_keyserver | default(omit) }}"
url: "{{ item.fallback_url | default(omit) }}"
state: "present"
register: add_keys_fallback
until: add_keys_fallback | success
retries: 5
delay: 2
with_items: "{{ rabbitmq_gpg_keys }}"
when:
- (item.fallback_keyserver is defined or item.fallback_url is defined)
tags:
- rabbitmq-apt-keys

- name: Add rabbitmq repo
apt_repository:
repo: "{{ rabbitmq_repo.repo }}"
state: "{{ rabbitmq_repo.state }}"
filename: "{{ rabbitmq_repo.filename | default(omit) }}"
register: add_rabbitmq_repos
until: add_rabbitmq_repos|success
retries: 5
delay: 2
when:
- rabbitmq_install_method == 'external_repo'
tags:
- rabbitmq-repos

- name: Add erlang repo
apt_repository:
repo: "{{ rabbitmq_erlang_repo.repo }}"
state: "{{ rabbitmq_erlang_repo.state }}"
filename: "{{ rabbitmq_erlang_repo.filename | default(omit) }}"
register: add_erlang_repos
until: add_erlang_repos|success
retries: 5
delay: 2
tags:
- rabbitmq-repos

#TODO(evrardjp): Replace the next 2 tasks by a standard apt with cache
#when https://github.com/ansible/ansible-modules-core/pull/1517 is merged
#in 1.9.x or we move to 2.0 (if tested working)
Expand All @@ -26,7 +85,9 @@
- name: Update apt if needed
apt:
update_cache: yes
when: "ansible_date_time.epoch|float - apt_cache_stat.stat.mtime > {{cache_timeout}}"
when:
- (ansible_date_time.epoch|float - apt_cache_stat.stat.mtime > {{cache_timeout}}) or
add_rabbitmq_repos | changed or add_erlang_repos | changed
tags:
- rabbitmq-apt-packages

Expand All @@ -42,59 +103,12 @@
tags:
- rabbitmq-apt-packages

- name: Add rabbitmq apt-keys
apt_key:
id: "{{ item.hash_id }}"
keyserver: "{{ item.keyserver | default(omit) }}"
data: "{{ item.data | default(omit) }}"
url: "{{ item.url | default(omit) }}"
state: "present"
register: add_keys
until: add_keys|success
failed_when: false
retries: 5
delay: 2
when: rabbitmq_install_method == 'external_repo'
with_items: "{{ rabbitmq_gpg_keys }}"
tags:
- rabbitmq-apt-keys

- name: Add rabbitmq apt-keys using fallback keyserver
apt_key:
id: "{{ item.hash_id }}"
keyserver: "{{ item.fallback_keyserver | default(omit) }}"
url: "{{ item.fallback_url | default(omit) }}"
state: "present"
register: add_keys_fallback
until: add_keys_fallback|success
retries: 5
delay: 2
with_items: "{{ rabbitmq_gpg_keys }}"
when:
- rabbitmq_install_method == 'external_repo'
- add_keys|failed
- (item.fallback_keyserver is defined or item.fallback_url is defined)
tags:
- rabbitmq-apt-keys

- name: Add rabbitmq repo
apt_repository:
repo: "{{ rabbitmq_repo.repo }}"
state: "{{ rabbitmq_repo.state }}"
filename: "{{ rabbitmq_repo.filename | default(omit) }}"
register: add_repos
until: add_repos|success
retries: 5
delay: 2
when: rabbitmq_install_method == 'external_repo'
tags:
- rabbitmq-repos

- name: Install the RabbitMQ package through a deb file
- name: Install the RabbitMQ package deb
apt:
deb: "{{ rabbitmq_package_path }}"
register: install_rabbitmq
when: rabbitmq_install_method == 'file'
when:
- rabbitmq_install_method == 'file'
tags:
- rabbitmq-package-deb
- rabbitmq-apt-packages
Expand All @@ -108,6 +122,7 @@
retries: 5
delay: 2
with_items: "{{ rabbitmq_distro_packages }}"
when: rabbitmq_install_method != 'file'
when:
- rabbitmq_install_method != 'file'
tags:
- rabbitmq-apt-packages
99 changes: 53 additions & 46 deletions tasks/install_yum.yml
Expand Up @@ -13,43 +13,33 @@
# See the License for the specific language governing permissions and
# limitations under the License.

- name: Install epel-release package
yum:
name: epel-release
state: present
update_cache: yes
tags:
- rabbitmq-yum-packages
- block:
- name: Add rabbitmq gpg-keys
rpm_key:
state: present
key: "{{ item.keyserver }}/{{ item.key_name }}"
register: add_keys
until: add_keys | success
retries: 5
delay: 2
with_items: "{{ rabbitmq_gpg_keys }}"
tags:
- rabbitmq-gpg-keys

- name: Add rabbitmq gpg-keys
rpm_key:
state: present
key: "{{ item.keyserver }}/{{ item.key_name }}"
register: add_keys
until: add_keys|success
failed_when: false
retries: 5
delay: 2
with_items: "{{ rabbitmq_gpg_keys }}"
when: rabbitmq_install_method != 'file'
tags:
- rabbitmq-gpg-keys

- name: Add rabbitmq gpg-keys using fallback keyserver
rpm_key:
state: present
key: "{{ item.fallback_keyserver }}/{{ item.key_name }}"
register: add_keys
until: add_keys|success
retries: 5
delay: 2
with_items: "{{ rabbitmq_gpg_keys }}"
when:
- rabbitmq_install_method != 'file'
- add_keys|failed
- item.fallback_keyserver is defined
tags:
- rabbitmq-gpg-keys
rescue:
- name: Add rabbitmq gpg-keys using fallback keyserver
rpm_key:
state: present
key: "{{ item.fallback_keyserver }}/{{ item.key_name }}"
register: add_keys_fallback
until: add_keys_fallback | success
retries: 5
delay: 2
with_items: "{{ rabbitmq_gpg_keys }}"
when:
- item.fallback_keyserver is defined
tags:
- rabbitmq-gpg-keys

- name: Install RabbitMQ yum mirror
yum_repository:
Expand All @@ -63,7 +53,23 @@
gpgkey: "{{ rabbitmq_repo.gpgkey | default(omit) }}"
sslverify: "{{ rabbitmq_repo.sslverify | default(omit) }}"
sslcacert: "{{ rabbitmq_repo.sslcacert | default(omit) }}"
when: rabbitmq_install_method != 'file'
when:
- rabbitmq_install_method != 'file'
tags:
- rabbitmq-repos

- name: Install erlang yum mirror
yum_repository:
name: "{{ rabbitmq_erlang_repo.name }}"
file: "{{ rabbitmq_erlang_repo.filename | default(omit) }}"
description: "{{ rabbitmq_erlang_repo.description | default(omit) }}"
baseurl: "{{ rabbitmq_erlang_repo.baseurl }}"
repo_gpgcheck: "{{ rabbitmq_erlang_repo.repo_gpgcheck | default(omit) }}"
gpgcheck: "{{ rabbitmq_erlang_repo.gpgcheck | default(omit) }}"
state: "{{ rabbitmq_erlang_repo.state }}"
gpgkey: "{{ rabbitmq_erlang_repo.gpgkey | default(omit) }}"
sslverify: "{{ rabbitmq_erlang_repo.sslverify | default(omit) }}"
sslcacert: "{{ rabbitmq_erlang_repo.sslcacert | default(omit) }}"
tags:
- rabbitmq-repos

Expand All @@ -79,6 +85,14 @@
tags:
- rabbitmq-yum-packages

- name: Install RabbitMQ packages
yum:
name: "{{ (rabbitmq_install_method == 'file') | ternary(rabbitmq_package_path, rabbitmq_distro_packages) }}"
register: install_rabbitmq
tags:
- rabbitmq-package-rpm
- rabbitmq-yum-packages

- name: Install RabbitMQ package dependencies for external_repo usage
yum:
pkg: "{{ item }}"
Expand All @@ -88,14 +102,7 @@
retries: 5
delay: 2
with_items: "{{ rabbitmq_mirror_dependencies }}"
when: rabbitmq_install_method != 'file'
tags:
- rabbitmq-yum-packages

- name: Install the RabbitMQ package
yum:
name: "{{ (rabbitmq_install_method == 'file') | ternary(rabbitmq_package_path, rabbitmq_distro_packages) }}"
register: install_rabbitmq
when:
- rabbitmq_install_method != 'file'
tags:
- rabbitmq-package-rpm
- rabbitmq-yum-packages
26 changes: 18 additions & 8 deletions vars/debian.yml
Expand Up @@ -19,22 +19,32 @@ _rabbitmq_release_version: "{{ rabbitmq_package_version.split('-')[0] }}"
_rabbitmq_package_sha256: "ff100febb8c409692e57f3dc98fd2fc667f83eeefa3958a6fda865ce40a40349"
_rabbitmq_package_path: "/opt/rabbitmq-server.deb"

rabbitmq_dependencies:
- erlang-base-hipe
- erlang-nox
- socat

rabbitmq_distro_packages:
- rabbitmq-server

_rabbitmq_gpg_keys:
- key_name: 'rabbitmq'
keyserver: 'hkp://keyserver.ubuntu.com:80'
fallback_keyserver: 'hkp://p80.pool.sks-keyservers.net:80'
hash_id: '0x6B73A36E6026DFCA'
- key_name: 'erlang_solutions'
keyserver: 'hkp://keyserver.ubuntu.com:80'
fallback_keyserver: 'hkp://p80.pool.sks-keyservers.net:80'
hash_id: '0xd208507ca14f4fca'

_rabbitmq_repo_url: "{{ rabbitmq_apt_repo_url | default('http://www.rabbitmq.com/debian') }}"
_rabbitmq_repo:
repo: "deb {{ rabbitmq_repo_url }} testing main"
state: "present"
filename: "RabbitMQ"

_rabbitmq_erlang_repo_url: "https://packages.erlang-solutions.com/{{ ansible_distribution | lower }}"
_rabbitmq_erlang_repo:
repo: "deb {{ rabbitmq_erlang_repo_url }} {{ ansible_distribution_release | lower }} contrib"
state: "present"
filename: els_erlang

rabbitmq_dependencies:
- erlang-base-hipe
- erlang-nox
- socat

rabbitmq_distro_packages:
- rabbitmq-server

0 comments on commit 4eb83b1

Please sign in to comment.