From cfddca21ebd89c8733e425318749dd90855a14af Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Fri, 27 Jul 2018 10:30:26 -0400 Subject: [PATCH] Update to use oslo.messaging service RPC and Notify This introduces oslo.messaging variables that define the RPC and Notify transports for the OpenStack services. These parameters replace the rabbitmq values and are used to generate the messaging transport_url for the service. This patch: * Add oslo.messaging variables for RPC and Notify to defaults * Update transport_url generation in conf * Add oslo.messaging to tests inventory and update tests * Install extra packages for optional drivers * Add release note Change-Id: I0612252927f81b3584054f6cd77a2826c5d3fc3b --- README.rst | 6 ++-- defaults/main.yml | 30 +++++++++++++++---- ...ng-separate-backends-601acca3643bd90c.yaml | 19 ++++++++++++ tasks/cloudkitty_install.yml | 17 +++++++++++ templates/cloudkitty.conf.j2 | 11 ++++--- tests/inventory | 6 ++++ tests/os_cloudkitty-overrides.yml | 9 ++++-- tests/test-install-cloudkitty.yml | 23 +++++--------- 8 files changed, 91 insertions(+), 30 deletions(-) create mode 100644 releasenotes/notes/oslo-messaging-separate-backends-601acca3643bd90c.yaml diff --git a/README.rst b/README.rst index 838d6c7..7d5e5e9 100644 --- a/README.rst +++ b/README.rst @@ -24,7 +24,8 @@ Required Variables .. code-block:: yaml cloudkitty_service_password - cloudkitty_rabbitmq_password + cloudkitty_oslomsg_rpc_password + cloudkitty_oslomsg_notify_password cloudkitty_container_mysql_password cloudkitty_galera_address @@ -44,7 +45,8 @@ Example Playbook cloudkitty_galera_address: "{{ internal_lb_vip_address }}" cloudkitty_container_mysql_password: "SuperSecretePassword1" cloudkitty_service_password: "SuperSecretePassword2" - cloudkitty_rabbitmq_password: "SuperSecretePassword3" + cloudkitty_oslomsg_rpc_password: "SuperSecretePassword3" + cloudkitty_oslomsg_notify_password: "SuperSecretePassword4" Documentation for the project can be found at: https://docs.openstack.org/openstack-ansible-os_cloudkitty/latest/ diff --git a/defaults/main.yml b/defaults/main.yml index 2916463..b2e69ad 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -28,11 +28,24 @@ cloudkitty_pip_package_state: "latest" cloudkitty_service_user_name: cloudkitty -cloudkitty_rabbitmq_userid: cloudkitty -cloudkitty_rabbitmq_vhost: /cloudkitty -cloudkitty_rabbitmq_port: 5672 -cloudkitty_rabbitmq_servers: 127.0.0.1 -cloudkitty_rabbitmq_use_ssl: False +## Oslo Messaging info + +# RPC +cloudkitty_oslomsg_rpc_transport: rabbit +cloudkitty_oslomsg_rpc_servers: 127.0.0.1 +cloudkitty_oslomsg_rpc_port: 5672 +cloudkitty_oslomsg_rpc_use_ssl: False +cloudkitty_oslomsg_rpc_userid: cloudkitty +cloudkitty_oslomsg_rpc_vhost: /cloudkitty + +# Notify +cloudkitty_oslomsg_notify_transport: rabbit +cloudkitty_oslomsg_notify_servers: 127.0.0.1 +cloudkitty_oslomsg_notify_port: 5672 +cloudkitty_oslomsg_notify_use_ssl: False +cloudkitty_oslomsg_notify_userid: "{{ cloudkitty_oslomsg_rpc_userid }}" +cloudkitty_oslomsg_notify_password: "{{ cloudkitty_oslomsg_rpc_password }}" +cloudkitty_oslomsg_notify_vhost: "{{ cloudkitty_oslomsg_rpc_vhost }}" cloudkitty_system_group_name: cloudkitty cloudkitty_system_user_name: cloudkitty @@ -117,6 +130,13 @@ cloudkitty_pip_packages: - SQLAlchemy>=1.0.10 - tooz +## (Qdrouterd) integration +# TODO(ansmith): Change structure when more backends will be supported +cloudkitty_oslomsg_amqp1_enabled: "{{ cloudkitty_oslomsg_rpc_transport == 'amqp' }}" + +cloudkitty_optional_oslomsg_amqp1_pip_packages: + - oslo.messaging[amqp1] + # This variable is used by the repo_build process to determine # which host group to check for members of before building the # pip packages required by this role. The value is picked up diff --git a/releasenotes/notes/oslo-messaging-separate-backends-601acca3643bd90c.yaml b/releasenotes/notes/oslo-messaging-separate-backends-601acca3643bd90c.yaml new file mode 100644 index 0000000..402091d --- /dev/null +++ b/releasenotes/notes/oslo-messaging-separate-backends-601acca3643bd90c.yaml @@ -0,0 +1,19 @@ +--- +features: + - Support separate oslo.messaging services for RPC and Notifications + to enable operation of separate and different messaging backend servers. +deprecations: + - | + The rabbitmq server parameters have been replaced by corresponding + oslo.messaging RPC and Notify parameters in order to abstract the + messaging service from the actual backend server deployment. + - cloudkitty_oslomsg_rpc_servers replaces rabbitmq_servers + - cloudkitty_oslomsg_rpc_port replaces rabbitmq_port + - cloudkitty_oslomsg_rpc_userid replaces rabbitmq_userid + - cloudkitty_oslomsg_rpc_vhost replaces rabbitmq_vhost + - cloudkitty_oslomsg_rpc_use_ssl replaces rabbitmq_use_ssl + - added cloudkitty_oslomsg_notify_servers + - added cloudkitty_oslomsg_notify_port + - added cloudkitty_oslomsg_notify_use_ssl + - added cloudkitty_oslomsg_notify_userid + - added cloudkitty_oslomsg_notify_vhost diff --git a/tasks/cloudkitty_install.yml b/tasks/cloudkitty_install.yml index 4975c65..e1f74a1 100644 --- a/tasks/cloudkitty_install.yml +++ b/tasks/cloudkitty_install.yml @@ -132,3 +132,20 @@ - skip_ansible_lint - cloudkitty-install - cloudkitty-pip-packages + +- name: Install optional pip packages + pip: + name: "{{ cloudkitty_optional_oslomsg_amqp1_pip_packages }}" + state: "{{ cloudkitty_pip_package_state }}" + virtualenv: "{{ cloudkitty_bin | dirname }}" + virtualenv_site_packages: "no" + when: cloudkitty_oslomsg_amqp1_enabled + register: install_optional_packages + until: install_optional_packages is success + retries: 5 + delay: 2 + notify: + - Restart cloudkitty services + tags: + - cloudkitty-install + - cloudkitty-pip-packages diff --git a/templates/cloudkitty.conf.j2 b/templates/cloudkitty.conf.j2 index 85c0c2b..bfad38b 100644 --- a/templates/cloudkitty.conf.j2 +++ b/templates/cloudkitty.conf.j2 @@ -6,8 +6,8 @@ use_stderr = False debug = {{ debug }} notification_topics = {{ cloudkitty_notification_topics }} -## RabbitMQ RPC -transport_url = rabbit://{% for host in cloudkitty_rabbitmq_servers.split(',') %}{{ cloudkitty_rabbitmq_userid }}:{{ cloudkitty_rabbitmq_password }}@{{ host }}:{{ cloudkitty_rabbitmq_port }}{% if not loop.last %},{% else %}/{{ cloudkitty_rabbitmq_vhost }}{% endif %}{% endfor %} +## Oslo Messaging RPC +transport_url = {{ cloudkitty_oslomsg_rpc_transport }}://{% for host in cloudkitty_oslomsg_rpc_servers.split(',') %}{{ cloudkitty_oslomsg_rpc_userid }}:{{ cloudkitty_oslomsg_rpc_password }}@{{ host }}:{{ cloudkitty_oslomsg_rpc_port }}{% if not loop.last %},{% else %}/{{ cloudkitty_oslomsg_rpc_vhost }}{% if (cloudkitty_oslomsg_rpc_use_ssl | lower) | bool %}?ssl=1{% else %}?ssl=0{% endif %}{% endif %}{% endfor %} [api] port = {{ cloudkitty_service_port }} @@ -47,7 +47,10 @@ auth_section = keystone_authtoken [oslo_messaging_qpid] [oslo_messaging_rabbit] -ssl = {{ cloudkitty_rabbitmq_use_ssl }} +ssl = {{ cloudkitty_oslomsg_notify_use_ssl | bool }} + +[oslo_messaging_notifications] +transport_url = {{ cloudkitty_oslomsg_notify_transport }}://{% for host in cloudkitty_oslomsg_notify_servers.split(',') %}{{ cloudkitty_oslomsg_notify_userid }}:{{ cloudkitty_oslomsg_notify_password }}@{{ host }}:{{ cloudkitty_oslomsg_notify_port }}{% if not loop.last %},{% else %}/{{ cloudkitty_oslomsg_notify_vhost }}{% if (cloudkitty_oslomsg_notify_use_ssl | lower) | bool %}?ssl=1{% else %}?ssl=0{% endif %}{% endif %}{% endfor %} [output] pipeline = {{ cloudkitty_output_pipeline }} @@ -65,4 +68,4 @@ backend = {{ cloudkitty_output_backend }} auth_section = keystone_authtoken [orchestrator] -coordination_url = mysql://{{ cloudkitty_galera_user }}:{{ cloudkitty_container_mysql_password }}@{{ cloudkitty_galera_address }}/{{ cloudkitty_galera_database }} \ No newline at end of file +coordination_url = mysql://{{ cloudkitty_galera_user }}:{{ cloudkitty_container_mysql_password }}@{{ cloudkitty_galera_address }}/{{ cloudkitty_galera_database }} diff --git a/tests/inventory b/tests/inventory index 80c435f..427e838 100644 --- a/tests/inventory +++ b/tests/inventory @@ -7,6 +7,12 @@ openstack1 ansible_host=10.100.100.3 ansible_become=True ansible_user=root service1 openstack1 +[oslomsg_rpc_all] +service1 + +[oslomsg_notify_all] +service1 + [rabbitmq_all] service1 diff --git a/tests/os_cloudkitty-overrides.yml b/tests/os_cloudkitty-overrides.yml index cccb6c8..4c30d07 100644 --- a/tests/os_cloudkitty-overrides.yml +++ b/tests/os_cloudkitty-overrides.yml @@ -20,6 +20,9 @@ cloudkitty_requirements_git_install_branch: master cloudkitty_galera_address: "{{ hostvars[groups['galera_all'][0]]['ansible_host'] }}" cloudkitty_container_mysql_password: "SuperSecrete" cloudkitty_service_password: "secrete" -cloudkitty_rabbitmq_password: "secrete" -cloudkitty_rabbitmq_userid: cloudkitty -cloudkitty_rabbitmq_vhost: /cloudkitty +cloudkitty_oslomsg_rpc_password: "secrete" +cloudkitty_oslomsg_rpc_userid: cloudkitty +cloudkitty_oslomsg_rpc_vhost: /cloudkitty +cloudkitty_oslomsg_notify_password: "secrete" +cloudkitty_oslomsg_notify_userid: cloudkitty +cloudkitty_oslomsg_notify_vhost: /cloudkitty diff --git a/tests/test-install-cloudkitty.yml b/tests/test-install-cloudkitty.yml index 3cbdeae..6be564b 100644 --- a/tests/test-install-cloudkitty.yml +++ b/tests/test-install-cloudkitty.yml @@ -18,22 +18,13 @@ remote_user: root gather_facts: true pre_tasks: - - name: Ensure Rabbitmq vhost - rabbitmq_vhost: - name: "{{ cloudkitty_rabbitmq_vhost }}" - state: "present" - delegate_to: "{{ hostvars[groups['rabbitmq_all'][0]]['ansible_host'] }}" - - name: Ensure rabbitmq user - rabbitmq_user: - user: "{{ cloudkitty_rabbitmq_userid }}" - password: "{{ cloudkitty_rabbitmq_password }}" - vhost: "{{ cloudkitty_rabbitmq_vhost }}" - configure_priv: ".*" - read_priv: ".*" - write_priv: ".*" - state: "present" - no_log: true - delegate_to: "{{ hostvars[groups['rabbitmq_all'][0]]['ansible_host'] }}" + - include: common/ensure-oslomsg.yml + rpc_vhost: "{{ cloudkitty_oslomsg_rpc_vhost }}" + rpc_user: "{{ cloudkitty_oslomsg_rpc_userid }}" + rpc_password: "{{ cloudkitty_oslomsg_rpc_password }}" + notify_vhost: "{{ cloudkitty_oslomsg_notify_vhost }}" + notify_user: "{{ cloudkitty_oslomsg_notify_userid }}" + notify_password: "{{ cloudkitty_oslomsg_notify_password }}" roles: - role: "os_cloudkitty" vars_files: