Files
openstack-ansible-rabbitmq_…/tasks/install_yum.yml
Major Hayden 05370b0394 Optimize CentOS Erlang installation
This patch optimizes the Erlang/RabbitMQ installation on CentOS. It
includes:

  * Installing RabbitMQ from RabbitMQ's repository
  * Installing Erlang all-in-one from RabbitMQ's repository
  * Remove old versionlocks before applying new ones (fixes bug)

The erlang-solutions repository is hosted in eastern Europe and has
high latency to the USA and western Europe. Installing from that
repository brings in over 80 individual packages, which causes
additional delays in the role.

The Erlang all-in-one package from RabbitMQ's repository contains
only the Erlang bits that RabbitMQ needs. Also, it has HiPE enabled
by default, which is recommended by RabbitMQ developers for
better performance.

Closes-Bug: 1712596
Change-Id: I1bfcc96f353bd27b0004d93e250bb041eee48bdb
2017-09-12 09:59:47 -06:00

130 lines
4.2 KiB
YAML

---
# Copyright 2016, Walmart Stores, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
- 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
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:
name: "{{ rabbitmq_repo.name }}"
file: "{{ rabbitmq_repo.filename | default(omit) }}"
description: "{{ rabbitmq_repo.description | default(omit) }}"
baseurl: "{{ rabbitmq_repo.baseurl }}"
repo_gpgcheck: "{{ rabbitmq_repo.repo_gpgcheck | default(omit) }}"
gpgcheck: "{{ rabbitmq_repo.gpgcheck | default(omit) }}"
state: "{{ rabbitmq_repo.state }}"
gpgkey: "{{ rabbitmq_repo.gpgkey | default(omit) }}"
sslverify: "{{ rabbitmq_repo.sslverify | default(omit) }}"
sslcacert: "{{ rabbitmq_repo.sslcacert | default(omit) }}"
when:
- rabbitmq_install_method == 'external_repo'
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) }}"
when:
- rabbitmq_install_method == 'external_repo'
tags:
- rabbitmq-repos
- name: Enable and set erlang repo priority
command: |
yum-config-manager
--enable {{ item.name }}
--setopt="{{ item.name }}.priority={{ item.priority }}"
changed_when: false
with_items:
- name: "{{ rabbitmq_repo.name }}"
priority: 40
- name: "{{ rabbitmq_erlang_repo.name }}"
priority: 40
tags:
- rabbitmq-repos
- name: Install yum versionlock plugin
package:
name: "yum-plugin-versionlock"
state: "{{ rabbitmq_package_state }}"
tags:
- rabbitmq-yum-packages
- name: Gather a list of the currently locked versions
command: yum versionlock list
register: yum_versionlock_list
tags:
- rabbitmq-yum-packages
- name: Lock package versions
shell: |
yum versionlock delete {{ item.pkg_name }}
yum versionlock add {{ item.pkg_spec }}
args:
warn: no
when:
- item.pkg_spec not in yum_versionlock_list.stdout
with_items:
- { 'pkg_name': 'erlang', 'pkg_spec': "erlang-19*" }
- { 'pkg_name': 'rabbitmq-server', 'pkg_spec': "rabbitmq-server-{{ rabbitmq_release_version }}*" }
tags:
- rabbitmq-yum-packages
# NOTE(mhayden): With the version locks applied, this step will install
# the correct version of RabbitMQ along with the correct version of the
# all-in-one erlang package.
- name: Install RabbitMQ packages
package:
name: "{{ rabbitmq_distro_packages }}"
state: "{{ rabbitmq_package_state }}"
register: install_rabbitmq
tags:
- rabbitmq-package-rpm
- rabbitmq-yum-packages