diff --git a/defaults/main.yml b/defaults/main.yml index d90934b2..353f5fd7 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -54,7 +54,7 @@ rabbitmq_erlang_repo_url: "{{ _rabbitmq_erlang_repo_url }}" rabbitmq_erlang_repo: "{{ _rabbitmq_erlang_repo }}" # Choose file, distro, external_repo for rabbitmq_install_method. -rabbitmq_install_method: "file" +rabbitmq_install_method: "{{ _rabbitmq_install_method }}" # Name of the rabbitmq cluster rabbitmq_cluster_name: rabbitmq_cluster1 diff --git a/releasenotes/notes/optimize-centos-erlang-install-bafd1c376ffca35e.yaml b/releasenotes/notes/optimize-centos-erlang-install-bafd1c376ffca35e.yaml new file mode 100644 index 00000000..d11cd06f --- /dev/null +++ b/releasenotes/notes/optimize-centos-erlang-install-bafd1c376ffca35e.yaml @@ -0,0 +1,15 @@ +--- +features: + - | + The installation of Erlang and is now optimized for CentOS. + Erlang 19.x is now installed via a single package that is maintained by + RabbitMQ developers and it provides the minimal features required for + RabbitMQ to function. It also includes HiPE support for increased + performance. + + The version of Erlang is kept constant using yum's versionlock plugin. + - | + RabbitMQ is now installed via an RPM repository provided by RabbitMQ + developers. The version is kept constant via yum's versionlock plugin. + This allows the tasks to lock the RabbitMQ version to a particular + revision and prevent changes to that version. diff --git a/tasks/install_yum.yml b/tasks/install_yum.yml index 82d4b661..9e17aa4c 100644 --- a/tasks/install_yum.yml +++ b/tasks/install_yum.yml @@ -54,7 +54,7 @@ sslverify: "{{ rabbitmq_repo.sslverify | default(omit) }}" sslcacert: "{{ rabbitmq_repo.sslcacert | default(omit) }}" when: - - rabbitmq_install_method != 'file' + - rabbitmq_install_method == 'external_repo' tags: - rabbitmq-repos @@ -70,6 +70,8 @@ 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 @@ -80,6 +82,8 @@ --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: @@ -92,41 +96,34 @@ tags: - rabbitmq-yum-packages -- name: Lock version of erlang packages - command: yum versionlock add erlang*19.3* - register: yum_versionlock_erlang - changed_when: "yum_versionlock_erlang.stdout.find('versionlock added: 0') == -1" +- name: Gather a list of the currently locked versions + command: yum versionlock list + register: yum_versionlock_list tags: - rabbitmq-yum-packages -- name: Install RabbitMQ package dependencies - package: - pkg: "{{ rabbitmq_dependencies }}" - state: "{{ rabbitmq_package_state }}" - register: install_packages - until: install_packages|success - retries: 5 - delay: 2 +- 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_install_method == 'file') | ternary(rabbitmq_package_path, rabbitmq_distro_packages) }}" + name: "{{ rabbitmq_distro_packages }}" + state: "{{ rabbitmq_package_state }}" register: install_rabbitmq tags: - rabbitmq-package-rpm - rabbitmq-yum-packages - -- name: Install RabbitMQ package dependencies for external_repo usage - package: - pkg: "{{ rabbitmq_mirror_dependencies }}" - state: "{{ rabbitmq_package_state }}" - register: install_packages - until: install_packages|success - retries: 5 - delay: 2 - when: - - rabbitmq_install_method != 'file' - tags: - - rabbitmq-yum-packages diff --git a/tests/test-vars.yml b/tests/test-vars.yml index 7f4ee6b4..50979205 100644 --- a/tests/test-vars.yml +++ b/tests/test-vars.yml @@ -4,7 +4,6 @@ rabbitmq_ssl_cert: /etc/rabbitmq/rabbitmq.pem rabbitmq_ssl_key: /etc/rabbitmq/rabbitmq.key rabbitmq_hipe_compile: True -rabbitmq_install_method: file rabbitmq_old_package: debian: diff --git a/vars/debian.yml b/vars/debian.yml index 6b138a9d..71835b5d 100644 --- a/vars/debian.yml +++ b/vars/debian.yml @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +_rabbitmq_install_method: file _rabbitmq_package_url: "http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server_3.6.9-1_all.deb" _rabbitmq_package_version: "{{ rabbitmq_package_url.split('/')[-1].split('_')[1] }}" _rabbitmq_release_version: "{{ rabbitmq_package_version.split('-')[0] }}" diff --git a/vars/redhat.yml b/vars/redhat.yml index 55e6fc6d..596fa944 100644 --- a/vars/redhat.yml +++ b/vars/redhat.yml @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +_rabbitmq_install_method: external_repo _rabbitmq_package_url: "http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-3.6.9-1.el7.noarch.rpm" _rabbitmq_package_version: "{{ rabbitmq_package_url.split('/')[-1].rsplit('.', 1)[0] }}" _rabbitmq_release_version: "{{ rabbitmq_package_version.split('-')[2] }}" @@ -22,15 +23,14 @@ _rabbitmq_package_path: "/opt/rabbitmq-server.rpm" _rabbitmq_gpg_keys: - key_name: 'rabbitmq-release-signing-key.asc' keyserver: 'https://www.rabbitmq.com' - - key_name: 'erlang_solutions.asc' - keyserver: 'https://packages.erlang-solutions.com/ubuntu' + - key_name: 'gpgkey' + keyserver: 'https://packagecloud.io/rabbitmq/rabbitmq-server/' _rabbitmq_repo_url: "https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch" _rabbitmq_repo: name: rabbitmq_rabbitmq-server description: "RabbitMQ Server Rolling Repository" baseurl: "{{ rabbitmq_repo_url }}" - repo_gpgcheck: yes state: "present" gpgkey: "https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey" filename: RabbitMQ @@ -38,23 +38,14 @@ _rabbitmq_repo: #sslverify: no #sslcacert: /etc/pki/tls/certs/ca-bundle.crt -_rabbitmq_erlang_repo_url: "https://packages.erlang-solutions.com/rpm/centos/$releasever/$basearch" +_rabbitmq_erlang_repo_url: "https://dl.bintray.com/rabbitmq/rpm/erlang/19/el/7" _rabbitmq_erlang_repo: name: rabbitmq_els-erlang - description: "Erlang Solutions Erlang" + description: "RabbitMQ Erlang Packages from Bintray" baseurl: "{{ rabbitmq_erlang_repo_url }}" - repo_gpgcheck: no state: "present" filename: els-erlang -rabbitmq_dependencies: - - erlang-hipe - - openssl - - socat - -rabbitmq_mirror_dependencies: - - pygpgme - - yum-utils - rabbitmq_distro_packages: + - openssl - rabbitmq-server diff --git a/vars/suse.yml b/vars/suse.yml index f56f6aa6..ffc8932f 100644 --- a/vars/suse.yml +++ b/vars/suse.yml @@ -16,6 +16,7 @@ # Even though we install the rabbitmq-server from the openSUSE repositories # (the Ocata OBS project) we still add these here in case we use them in the # future. +_rabbitmq_install_method: file _rabbitmq_package_url: "http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-3.6.9-1.suse.noarch.rpm" _rabbitmq_package_version: "{{ rabbitmq_package_url.split('/')[-1].rsplit('.', 1)[0] }}" _rabbitmq_release_version: "{{ rabbitmq_package_version.split('-')[2] }}"