Имеется Ansible плейбук, где среди прочего выполняется установка и настройка RabbitMQ.
При запуске задачи с использованием плагина rabbitmq_vhost
возникает ошибка:
[simterm]
TASK [rabbitmq : Add RabbitMQ vhosts] **** fatal: [dev.mobilebackend.domain.world]: FAILED! => {"changed": false, "cmd": "/usr/sbin/rabbitmqctl -q -n rabbit list_vhosts name tracing", "msg": "Error:********@localhost'\n- home dir: /var/lib/rabbitmq\n- cookie hash: cWvPHXMU4l0V3ALUhc3MbA==", "rc": 69, "stderr": "Error: unable to connect to node rabbit@localhost: nodedown\n\nDIAGNOSTICS\n===========\n\nattempted to contact: [rabbit@localhost]\n\nrabbit@localhost:\n * connected to epmd (port 4369) on localhost\n * epmd reports node 'rabbit' running on port 25672\n * TCP connection succeeded but Erlang distribution failed\n\n * Hostname mismatch: node \"rabbit@bm-backed-app-dev\" believes its host is different. Please ensure that hostnames resolve the same way locally and on \"rabbit@bm-backed-app-dev\"\n\n\ncurrent node details:\n- node name: 'rabbitmq-cli-54@localhost'\n- home dir: /var/lib/rabbitmq\n- cookie hash: cWvPHXMU4l0V3ALUhc3MbA==\n\n", "stderr_lines": ["Error: unable to connect to node rabbit@localhost: nodedown", "", "DIAGNOSTICS", "===========", "", "attempted to contact: [rabbit@localhost]", "", "rabbit@localhost:", " * connected to epmd (port 4369) on localhost", " * epmd reports node 'rabbit' running on port 25672", " * TCP connection succeeded but Erlang distribution failed", "", " * Hostname mismatch: node \"rabbit@bm-backed-app-dev\" believes its host is different. Please ensure that hostnames resolve the same way locally and on \"rabbit@bm-backed-app-dev\"", "", "", "current node details:", "- node name: 'rabbitmq-cli-54@localhost'", "- home dir: /var/lib/rabbitmq", "- cookie hash: cWvPHXMU4l0V3ALUhc3MbA==", ""], "stdout": "", "stdout_lines": []}
[/simterm]
Решение – добавить в вызов rabbitmq_vhost
имя ноды с указанием имени хоста, в примере ниже это будет node: "rabbit@{{ set_hostname }}"
:
... - name: Add RabbitMQ vhosts rabbitmq_vhost: node: "rabbit@{{ set_hostname }}" name: "{{ item.value.vhost }}" state: present with_dict: "{{ rabbitmq_users }}" ...
Где set_hostname
– переменная, которая задаётся из hosts.ini
:
... [mobilebackend-dev:vars] env=dev aws_env=mobilebackend-dev set_hostname=bm-backed-app-dev ...
Проверяем:
[simterm]
... TASK [rabbitmq : Add RabbitMQ vhosts] **** ok: [dev.mobilebackend.domain.world] => (item={'key': 'rabbitadmin', 'value': {'password': 'password', 'vhost': '/', 'tags': 'aministrator'}}) changed: [dev.mobilebackend.domain.world] => (item={'key': 'project1', 'value': {'password': 'password', 'vhost': '/project1', 'tags': ''}}) changed: [dev.mobilebackend.domain.world] => (item={'key': 'project2', 'value': {'password': 'password', 'vhost': '/project2', 'tags': ''}}) changed: [dev.mobilebackend.domain.world] => (item={'key': 'project3', 'value': {'password': 'password', 'vhost': '/project3', 'tags': ''}}) ...
[/simterm]
Готово.