Merge lp:~niedbalski/charms/trusty/rabbitmq-server/hosts-ipv4 into lp:charms/trusty/rabbitmq-server

Proposed by Jorge Niedbalski
Status: Rejected
Rejected by: David Britton
Proposed branch: lp:~niedbalski/charms/trusty/rabbitmq-server/hosts-ipv4
Merge into: lp:charms/trusty/rabbitmq-server
Diff against target: 187 lines (+113/-13)
3 files modified
Makefile (+1/-1)
hooks/rabbitmq_server_relations.py (+19/-11)
unit_tests/test_rabbitmq_server_relations.py (+93/-1)
To merge this branch: bzr merge lp:~niedbalski/charms/trusty/rabbitmq-server/hosts-ipv4
Reviewer Review Type Date Requested Status
James Page Disapprove
Review Queue (community) automated testing Approve
Felipe Reyes (community) Approve
Review via email: mp+244492@code.launchpad.net

Description of the change

Prior to this change, the /etc/hosts file was populated only when ipv6-prefer is set, this change removes the ipv6 constraint.

- Added tests to cover the change.

To post a comment you must log in.
Revision history for this message
Felipe Reyes (freyes) wrote :

LGTM, the cluster was formed successfully with this change /etc/hosts contained IPv4 values.

$ juju run --service rabbitmq-server 'grep machine /etc/hosts'
- MachineId: "1"
  Stderr: "Warning: Permanently added '10.0.3.7' (ECDSA) to the list of known hosts.\r\n"
  Stdout: '10.0.3.176 freyes-local-machine-3

    10.0.3.241 freyes-local-machine-2

'
  UnitId: rabbitmq-server/0
- MachineId: "2"
  Stderr: "Warning: Permanently added '10.0.3.241' (ECDSA) to the list of known hosts.\r\n"
  Stdout: '10.0.3.176 freyes-local-machine-3

    10.0.3.7 freyes-local-machine-1

'
  UnitId: rabbitmq-server/1
- MachineId: "3"
  Stderr: "Warning: Permanently added '10.0.3.176' (ECDSA) to the list of known hosts.\r\n"
  Stdout: '10.0.3.7 freyes-local-machine-1

    10.0.3.241 freyes-local-machine-2

'
  UnitId: rabbitmq-server/2

review: Approve
Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_lint_check #222 trusty-rabbitmq-server for niedbalski mp244492
    LINT OK: passed

Build: http://10.230.18.80:8080/job/charm_lint_check/222/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_unit_test #185 trusty-rabbitmq-server for niedbalski mp244492
    UNIT OK: passed

Build: http://10.230.18.80:8080/job/charm_unit_test/185/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_amulet_test #139 trusty-rabbitmq-server for niedbalski mp244492
    AMULET FAIL: amulet-test missing

AMULET Results (max last 2 lines):
INFO:root:Search string not found in makefile target commands.
ERROR:root:No make target was executed.

Full amulet test output: pastebin not avail., cmd error
Build: http://10.230.18.80:8080/job/charm_amulet_test/139/

Revision history for this message
Review Queue (review-queue) wrote :

The results (PASS) are in and available here: http://reports.vapour.ws/charm-tests/charm-bundle-test-10683-results

review: Approve (automated testing)
Revision history for this message
Felipe Reyes (freyes) wrote :
Download full text (3.5 KiB)

Everything worked OK with a 3 node cluster in a openstack cloud without dns support for the instances

Here is the evidence:

environment: openstack-freyes
machines:
  "0":
    agent-state: started
    agent-version: 1.20.14
    dns-name: 10.55.61.143
    instance-id: cfdbd16e-6ce8-4996-a552-105b0d905a32
    instance-state: ACTIVE
    series: trusty
    hardware: arch=amd64 cpu-cores=1 mem=1024M root-disk=10240M
    state-server-member-status: has-vote
  "1":
    agent-state: started
    agent-version: 1.20.14
    dns-name: 10.55.61.145
    instance-id: a96f334c-31fb-495d-a4ca-96e063f4b672
    instance-state: ACTIVE
    series: trusty
    hardware: arch=amd64 cpu-cores=1 mem=1024M root-disk=10240M
  "2":
    agent-state: started
    agent-version: 1.20.14
    dns-name: 10.55.61.146
    instance-id: fe3b66a5-4a2b-4cf1-9f03-cccbf56c7356
    instance-state: ACTIVE
    series: trusty
    hardware: arch=amd64 cpu-cores=1 mem=1024M root-disk=10240M
  "3":
    agent-state: started
    agent-version: 1.20.14
    dns-name: 10.55.61.147
    instance-id: 7a61ee9e-acd6-44a5-911d-61c1cb732f52
    instance-state: ACTIVE
    series: trusty
    hardware: arch=amd64 cpu-cores=1 mem=1024M root-disk=10240M
services:
  rabbitmq-server:
    charm: local:trusty/rabbitmq-server-128
    exposed: false
    relations:
      cluster:
      - rabbitmq-server
    units:
      rabbitmq-server/0:
        agent-state: started
        agent-version: 1.20.14
        machine: "1"
        open-ports:
        - 5672/tcp
        public-address: 10.55.61.145
      rabbitmq-server/1:
        agent-state: started
        agent-version: 1.20.14
        machine: "2"
        open-ports:
        - 5672/tcp
        public-address: 10.55.61.146
      rabbitmq-server/2:
        agent-state: started
        agent-version: 1.20.14
        machine: "3"
        open-ports:
        - 5672/tcp
        public-address: 10.55.61.147
$ for i in 0 1 2; do juju ssh rabbitmq-server/$i 'sudo rabbitmqctl cluster_status'; done
Cluster status of node 'rabbit@juju-openstack-freyes-machine-1' ...
[{nodes,[{disc,['rabbit@juju-openstack-freyes-machine-1',
                'rabbit@juju-openstack-freyes-machine-2',
                'rabbit@juju-openstack-freyes-machine-3']}]},
 {running_nodes,['rabbit@juju-openstack-freyes-machine-3',
                 'rabbit@juju-openstack-freyes-machine-2',
                 'rabbit@juju-openstack-freyes-machine-1']},
 {partitions,[]}]
...done.
Connection to 10.55.61.145 closed.
Warning: Permanently added '10.55.61.146' (ECDSA) to the list of known hosts.
Cluster status of node 'rabbit@juju-openstack-freyes-machine-2' ...
[{nodes,[{disc,['rabbit@juju-openstack-freyes-machine-1',
                'rabbit@juju-openstack-freyes-machine-2',
                'rabbit@juju-openstack-freyes-machine-3']}]},
 {running_nodes,['rabbit@juju-openstack-freyes-machine-3',
                 'rabbit@juju-openstack-freyes-machine-1',
                 'rabbit@juju-openstack-freyes-machine-2']},
 {partitions,[]}]
...done.
Connection to 10.55.61.146 closed.
Warning: Permanently added '10.55.61.147' (ECDSA) to the list of known hosts.
Cluster status of node 'rabbit@juju-openstack-freyes-machine-3' ...
[{n...

Read more...

Revision history for this message
Jorge Niedbalski (niedbalski) wrote :

Thanks Felipe for your review.

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_lint_check #82 trusty-rabbitmq-server for niedbalski mp244492
    LINT OK: passed

Build: http://10.245.162.77:8080/job/charm_lint_check/82/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_lint_check #84 trusty-rabbitmq-server for niedbalski mp244492
    LINT OK: passed

Build: http://10.245.162.77:8080/job/charm_lint_check/84/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_lint_check #90 trusty-rabbitmq-server for niedbalski mp244492
    LINT OK: passed

Build: http://10.245.162.77:8080/job/charm_lint_check/90/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_unit_test #119 trusty-rabbitmq-server for niedbalski mp244492
    UNIT OK: passed

Build: http://10.245.162.77:8080/job/charm_unit_test/119/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_unit_test #120 trusty-rabbitmq-server for niedbalski mp244492
    UNIT OK: passed

Build: http://10.245.162.77:8080/job/charm_unit_test/120/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_unit_test #122 trusty-rabbitmq-server for niedbalski mp244492
    UNIT OK: passed

Build: http://10.245.162.77:8080/job/charm_unit_test/122/

Revision history for this message
James Page (james-page) wrote :

It's not a unrealistic expectation that IP address resolution should be functional within a MAAS managed environment; I'm reticent to put in a workaround in the charm as this feels like we're fixing the problem in the wrong place, and this will not just be a problem with the rabbitmq-server charm.

review: Disapprove
Revision history for this message
David Britton (dpb) wrote :

Hi Jorge -- Given feedback from James, I'd look into a fix in the environment where you are hitting this issue so other charms don't fall over.

Unmerged revisions

75. By Jorge Niedbalski

- Added /etc/hosts addition on ipv4 and ipv6 cases.
- Added tests for cover the changes

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Makefile'
2--- Makefile 2014-10-08 15:57:57 +0000
3+++ Makefile 2014-12-11 18:56:59 +0000
4@@ -22,5 +22,5 @@
5
6 unit_test:
7 @echo Starting tests...
8- CHARM_DIR=$(CHARM_DIR) $(TEST_PREFIX) nosetests unit_tests
9+ CHARM_DIR=$(CHARM_DIR) $(TEST_PREFIX) nosetests -s --nologcapture unit_tests
10
11
12=== modified file 'hooks/rabbitmq_server_relations.py'
13--- hooks/rabbitmq_server_relations.py 2014-11-27 11:07:01 +0000
14+++ hooks/rabbitmq_server_relations.py 2014-12-11 18:56:59 +0000
15@@ -8,6 +8,7 @@
16 import socket
17
18 import rabbit_utils as rabbit
19+
20 from lib.utils import (
21 chown, chmod,
22 is_newer,
23@@ -167,11 +168,6 @@
24
25 @hooks.hook('cluster-relation-joined')
26 def cluster_joined(relation_id=None):
27- if config('prefer-ipv6'):
28- relation_settings = {'hostname': socket.gethostname(),
29- 'private-address': get_ipv6_addr()[0]}
30- relation_set(relation_id=relation_id,
31- relation_settings=relation_settings)
32
33 if is_relation_made('ha') and \
34 config('ha-vip-only') is False:
35@@ -182,7 +178,12 @@
36 # Set RABBITMQ_NODENAME to something that's resolvable by my peers
37 # get_host_ip() is called to sanitize private-address in case it
38 # doesn't return an IP address
39- ip_addr = get_host_ip(unit_get('private-address'))
40+
41+ if config('prefer-ipv6'):
42+ ip_addr = get_ipv6_addr()[0]
43+ else:
44+ ip_addr = get_host_ip(unit_get('private-address'))
45+
46 try:
47 nodename = get_hostname(ip_addr, fqdn=False)
48 except:
49@@ -194,6 +195,12 @@
50 # then use the current hostname
51 nodename = socket.gethostname()
52
53+ relation_set(relation_id=relation_id,
54+ relation_settings={
55+ 'hostname': nodename,
56+ 'private-address': ip_addr,
57+ })
58+
59 if nodename:
60 log('forcing nodename=%s' % nodename)
61 # need to stop it under current nodename
62@@ -222,11 +229,12 @@
63 log('cluster_joined: cookie not yet set.')
64 return
65
66- if config('prefer-ipv6') and rdata.get('hostname'):
67- private_address = rdata['private-address']
68- hostname = rdata['hostname']
69- if hostname:
70- rabbit.update_hosts_file({private_address: hostname})
71+ hostname = rdata.get('hostname', None)
72+ if hostname:
73+ private_addr = rdata.get('private-address')
74+ rabbit.update_hosts_file({
75+ private_addr: hostname,
76+ })
77
78 # sync passwords
79 blacklist = ['hostname', 'private-address', 'public-address']
80
81=== modified file 'unit_tests/test_rabbitmq_server_relations.py'
82--- unit_tests/test_rabbitmq_server_relations.py 2014-11-27 10:52:50 +0000
83+++ unit_tests/test_rabbitmq_server_relations.py 2014-12-11 18:56:59 +0000
84@@ -1,6 +1,8 @@
85 import os
86+import io
87+
88 from testtools import TestCase
89-from mock import patch, MagicMock
90+from mock import patch, MagicMock, mock_open
91
92 os.environ['JUJU_UNIT_NAME'] = 'UNIT_TEST/0'
93 import rabbitmq_server_relations
94@@ -125,3 +127,93 @@
95 mock_peer_store_and_set.assert_called_with(
96 relation_settings={'private-address': ipv6_addr},
97 relation_id=None)
98+
99+ @patch.object(rabbitmq_server_relations, 'rabbit')
100+ @patch('rabbitmq_server_relations.relation_ids')
101+ @patch('rabbitmq_server_relations.relation_get')
102+ @patch('rabbitmq_server_relations.peer_echo')
103+ @patch('rabbitmq_server_relations.peer_retrieve')
104+ @patch('rabbitmq_server_relations.is_relation_made')
105+ @patch('rabbitmq_server_relations.config')
106+ @patch('rabbitmq_server_relations.log')
107+ @patch('rabbitmq_server_relations.is_newer')
108+ @patch('rabbitmq_server_relations.update_nrpe_checks')
109+ @patch('rabbitmq_server_relations.related_units')
110+ def test_cluster_relation_changed_update_hosts(self,
111+ related_units,
112+ update_nrpe_checks,
113+ is_newer,
114+ log,
115+ mock_config,
116+ is_relation_made,
117+ peer_retrieve,
118+ peer_echo,
119+ relation_get,
120+ relation_id,
121+ rabbit):
122+ relation_get.return_value = {
123+ 'cookie': 'cookie-contents',
124+ 'hostname': 'rabbitmq.test',
125+ 'private-address': '10.0.0.1',
126+ }
127+
128+ peer_retrieve.return_value = relation_get.return_value.get('cookie')
129+ open_ = mock_open()
130+ open_.return_value = io.BytesIO()
131+
132+ with patch('rabbitmq_server_relations.open', open_, create=True):
133+ rabbitmq_server_relations.cluster_changed()
134+
135+ rabbit.update_hosts_file.assert_called_once_with({
136+ relation_get.return_value.get('private-address'):
137+ relation_get.return_value.get('hostname')
138+ })
139+
140+ @patch.object(rabbitmq_server_relations, 'rabbit')
141+ @patch('rabbitmq_server_relations.service_stop')
142+ @patch('rabbitmq_server_relations.service_restart')
143+ @patch('rabbitmq_server_relations.unit_get')
144+ @patch('rabbitmq_server_relations.relation_set')
145+ @patch('rabbitmq_server_relations.get_ipv6_addr')
146+ @patch('rabbitmq_server_relations.get_host_ip')
147+ @patch('rabbitmq_server_relations.get_hostname')
148+ @patch('rabbitmq_server_relations.peer_store')
149+ @patch('rabbitmq_server_relations.is_relation_made')
150+ @patch('rabbitmq_server_relations.config')
151+ @patch('rabbitmq_server_relations.log')
152+ @patch('rabbitmq_server_relations.is_newer')
153+ def test_cluster_relation_joined_hosts(self,
154+ is_newer,
155+ log,
156+ mock_config,
157+ is_relation_made,
158+ peer_store,
159+ get_hostname,
160+ get_host_ip,
161+ get_ipv6_addr,
162+ relation_set,
163+ unit_get,
164+ service_restart,
165+ service_stop,
166+ rabbit):
167+
168+ get_hostname.return_value = "rabbit.test"
169+ get_host_ip.return_value = "10.0.0.1"
170+ is_relation_made.return_value = False
171+
172+ def config(key):
173+ if key == 'ha-vip-only':
174+ return True
175+ return None
176+
177+ mock_config.side_effect = config
178+ open_ = mock_open()
179+ open_.return_value = io.BytesIO()
180+
181+ with patch('rabbitmq_server_relations.open', open_, create=True):
182+ rabbitmq_server_relations.cluster_joined()
183+
184+ relation_set.assert_called_with(
185+ relation_settings={'private-address': get_host_ip.return_value,
186+ 'hostname': get_hostname.return_value},
187+ relation_id=None)

Subscribers

People subscribed via source and target branches