diff --git a/defaults/main.yml b/defaults/main.yml index 7a4af793..4d05b5ba 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -39,6 +39,9 @@ rabbitmq_release_version: "{{ _rabbitmq_release_version }}" rabbitmq_package_sha256: "{{ _rabbitmq_package_sha256 }}" rabbitmq_package_path: "{{ _rabbitmq_package_path }}" +# Choose file, distro, external_repo for rabbitmq_install_method. +rabbitmq_install_method: "file" + # Name of the rabbitmq cluster rabbitmq_cluster_name: rabbitmq_cluster1 diff --git a/releasenotes/notes/rabbitmq-using-external-repo-instead-of-pkg-file-8cdd00f58d3496ba.yaml b/releasenotes/notes/rabbitmq-using-external-repo-instead-of-pkg-file-8cdd00f58d3496ba.yaml new file mode 100644 index 00000000..14a7701e --- /dev/null +++ b/releasenotes/notes/rabbitmq-using-external-repo-instead-of-pkg-file-8cdd00f58d3496ba.yaml @@ -0,0 +1,14 @@ +--- +features: + - | + RabbitMQ Server can now be installed from different + methods: a deb file (default), from standard + repository package and from external repository. + Current behavior is unchanged. Please define + ``rabbitmq_install_method: distro`` to use packages + provided by your distribution or + ``rabbitmq_install_method: external_repo`` to use + packages stored in an external repo. In the case + ``external_repo`` is used, the process will install + RabbitMQ from the packages hosted by packagecloud.io, + as recommended by RabbitMQ. diff --git a/tasks/install_apt.yml b/tasks/install_apt.yml index ee01602c..18dacc8d 100644 --- a/tasks/install_apt.yml +++ b/tasks/install_apt.yml @@ -27,10 +27,72 @@ tags: - rabbitmq-apt-packages -- name: Install the RabbitMQ package +- 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" + 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 apt: deb: "{{ rabbitmq_package_path }}" register: install_rabbitmq + when: rabbitmq_install_method == 'file' tags: - rabbitmq-package-deb - rabbitmq-apt-packages + +- name: Install RabbitMQ packages + package: + name: "{{ item }}" + state: "{{ rabbitmq_package_state }}" + register: install_packages + until: install_packages|success + retries: 5 + delay: 2 + with_items: "{{ rabbitmq_distro_packages }}" + when: rabbitmq_install_method != 'file' + tags: + - rabbitmq-apt-packages diff --git a/tasks/install_yum.yml b/tasks/install_yum.yml index 3d465f11..59c7ac7a 100644 --- a/tasks/install_yum.yml +++ b/tasks/install_yum.yml @@ -21,6 +21,52 @@ tags: - rabbitmq-yum-packages +- 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 + +- name: Install RabbitMQ yum mirror + yum_repository: + name: "{{ rabbitmq_repo.name }}" + file: "RabbitMQ" + 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 != 'file' + tags: + - rabbitmq-repos + - name: Install RabbitMQ package dependencies yum: pkg: "{{ item }}" @@ -34,9 +80,22 @@ tags: - rabbitmq-yum-packages +- name: Install RabbitMQ package dependencies for external_repo usage + yum: + pkg: "{{ item }}" + state: "{{ rabbitmq_package_state }}" + register: install_packages + until: install_packages|success + 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_package_path }}" + name: "{{ (rabbitmq_install_method == 'file') | ternary(rabbitmq_package_path, rabbitmq_distro_packages) }}" register: install_rabbitmq tags: - rabbitmq-package-rpm diff --git a/tasks/rabbitmq_pre_install.yml b/tasks/rabbitmq_pre_install.yml index e1b6a95c..53a490bc 100644 --- a/tasks/rabbitmq_pre_install.yml +++ b/tasks/rabbitmq_pre_install.yml @@ -34,6 +34,7 @@ retries: 3 delay: 10 until: package_download|success + when: rabbitmq_install_method == 'file' tags: - rabbitmq-package-deb - rabbitmq-package-deb-get diff --git a/vars/debian.yml b/vars/debian.yml index c5090a2d..7bd7ffad 100644 --- a/vars/debian.yml +++ b/vars/debian.yml @@ -23,3 +23,17 @@ 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' + +rabbitmq_apt_repo_url: "http://www.rabbitmq.com/debian" +rabbitmq_repo: + repo: "deb {{ rabbitmq_apt_repo_url }} testing main" + state: "present" \ No newline at end of file diff --git a/vars/redhat.yml b/vars/redhat.yml index d67ddfd8..f220a0f3 100644 --- a/vars/redhat.yml +++ b/vars/redhat.yml @@ -23,3 +23,25 @@ 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' + +rabbitmq_repo: + name: rabbitmq_rabbitmq-server + description: "RabbitMQ Server Rolling Repository" + baseurl: "https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch" + repo_gpgcheck: yes + state: "present" + gpgkey: "https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey" + # TODO(evrardjp) Move to ssl verify yes + #sslverify: no + #sslcacert: /etc/pki/tls/certs/ca-bundle.crt \ No newline at end of file