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: