diff --git a/defaults/main.yml b/defaults/main.yml index 9772124..d2dd473 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -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" diff --git a/meta/main.yml b/meta/main.yml index af0ed09..53f8b08 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -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' diff --git a/releasenotes/notes/esl-repo-6ff0c7f24ad2a043.yaml b/releasenotes/notes/esl-repo-6ff0c7f24ad2a043.yaml new file mode 100644 index 0000000..a06b121 --- /dev/null +++ b/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. diff --git a/tasks/install_apt.yml b/tasks/install_apt.yml index c2d81bc..588eb7f 100644 --- a/tasks/install_apt.yml +++ b/tasks/install_apt.yml @@ -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) @@ -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 @@ -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 @@ -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 diff --git a/tasks/install_yum.yml b/tasks/install_yum.yml index 06bc49b..bf7bf2f 100644 --- a/tasks/install_yum.yml +++ b/tasks/install_yum.yml @@ -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: @@ -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 @@ -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 }}" @@ -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 diff --git a/vars/debian.yml b/vars/debian.yml index b7855ef..5561732 100644 --- a/vars/debian.yml +++ b/vars/debian.yml @@ -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 diff --git a/vars/redhat.yml b/vars/redhat.yml index f708dc5..55e6fc6 100644 --- a/vars/redhat.yml +++ b/vars/redhat.yml @@ -19,26 +19,17 @@ _rabbitmq_release_version: "{{ rabbitmq_package_version.split('-')[2] }}" _rabbitmq_package_sha256: "757fc6746a1700380b3ba9bf4f00dfa16cc5a0ddc8c94636c4388e838f605c31" _rabbitmq_package_path: "/opt/rabbitmq-server.rpm" -rabbitmq_dependencies: - - erlang - - openssl - - socat - -rabbitmq_mirror_dependencies: - - pygpgme - - yum-utils - -rabbitmq_distro_packages: - - rabbitmq-server - _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' +_rabbitmq_repo_url: "https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch" _rabbitmq_repo: name: rabbitmq_rabbitmq-server description: "RabbitMQ Server Rolling Repository" - baseurl: "https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch" + baseurl: "{{ rabbitmq_repo_url }}" repo_gpgcheck: yes state: "present" gpgkey: "https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey" @@ -46,3 +37,24 @@ _rabbitmq_repo: # TODO(evrardjp) Move to ssl verify yes #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: + name: rabbitmq_els-erlang + description: "Erlang Solutions Erlang" + 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: + - rabbitmq-server