Merge ~cjohnston/charm-mongodb:lp-1914080 into charm-mongodb:master

Proposed by Chris Johnston
Status: Merged
Approved by: Adam Dyess
Approved revision: 4f28b4fa06c64f96835ee4b4d38f478f2b8c60f0
Merged at revision: 681db78cfbae1bf3aef49680dd9910975d52c990
Proposed branch: ~cjohnston/charm-mongodb:lp-1914080
Merge into: charm-mongodb:master
Diff against target: 210 lines (+114/-12)
6 files modified
hooks/hooks.py (+12/-7)
tests/functional/tests/bundles/bionic-replicated.yaml (+18/-0)
tests/functional/tests/bundles/bionic.yaml (+11/-1)
tests/functional/tests/bundles/focal.yaml (+11/-1)
tests/functional/tests/tests.yaml (+11/-1)
tests/functional/tests/tests_mongodb.py (+51/-2)
Reviewer Review Type Date Requested Status
Adam Dyess (community) Approve
Paul Goins Approve
BootStack Reviewers Pending
Review via email: mp+406467@code.launchpad.net

Commit message

Add NRPE replica sets check only when mongodb is deployed in a replica set configuration.

Fixes: LP#1914080

To post a comment you must log in.
Revision history for this message
🤖 Canonical IS Merge Bot (canonical-is-mergebot) wrote :

This merge proposal is being monitored by mergebot. Change the status to Approved to merge.

Revision history for this message
Paul Goins (vultaire) wrote :

Seems OK to me.

review: Approve
Revision history for this message
Adam Dyess (addyess) wrote :

LGTM too.

review: Approve
Revision history for this message
🤖 Canonical IS Merge Bot (canonical-is-mergebot) wrote :

Change successfully merged at revision 681db78cfbae1bf3aef49680dd9910975d52c990

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/hooks/hooks.py b/hooks/hooks.py
2index 9a994b2..632247a 100755
3--- a/hooks/hooks.py
4+++ b/hooks/hooks.py
5@@ -1526,17 +1526,22 @@ def update_nrpe_config():
6 check_cmd=check_mongo_script,
7 )
8
9- charm_plugin_dir = os.path.join(charm_dir(), "files", "nrpe-external-master/")
10+ charm_plugin_dir = os.path.join(
11+ charm_dir(), "files", "nrpe-external-master/")
12 rsync(
13- charm_plugin_dir, "/usr/local/lib/nagios/plugins/", options=["--executability"]
14+ charm_plugin_dir,
15+ "/usr/local/lib/nagios/plugins/",
16+ options=["--executability"]
17 )
18
19- nrpe.add_check(
20- shortname="replica_sets_status",
21- description="replica set check {%s}" % current_unit,
22- check_cmd="check_replica_sets.py",
23- )
24 nrpe.remove_check(shortname="check_replica_sets")
25+ nrpe.remove_check(shortname="replica_sets_status")
26+ if is_relation_made("replica-set"):
27+ nrpe.add_check(
28+ shortname="replica_sets_status",
29+ description="replica set check {%s}" % current_unit,
30+ check_cmd="check_replica_sets.py",
31+ )
32
33 nrpe.write()
34
35diff --git a/tests/functional/tests/bundles/bionic-replicated.yaml b/tests/functional/tests/bundles/bionic-replicated.yaml
36new file mode 100644
37index 0000000..c148970
38--- /dev/null
39+++ b/tests/functional/tests/bundles/bionic-replicated.yaml
40@@ -0,0 +1,18 @@
41+series: bionic
42+description: "mongodb-charm test bundle"
43+applications:
44+ mongodb:
45+ num_units: 3
46+ options:
47+ replicaset: testset
48+ backup_directory: /var/backups
49+ nrpe:
50+ charm: cs:nrpe
51+ nagios:
52+ series: bionic
53+ charm: cs:nagios
54+ num_units: 1
55+
56+relations:
57+ - [mongodb, nrpe]
58+ - [nagios:monitors, nrpe]
59diff --git a/tests/functional/tests/bundles/bionic.yaml b/tests/functional/tests/bundles/bionic.yaml
60index cef11a1..e23561e 100644
61--- a/tests/functional/tests/bundles/bionic.yaml
62+++ b/tests/functional/tests/bundles/bionic.yaml
63@@ -2,7 +2,17 @@ series: bionic
64 description: "mongodb-charm test bundle"
65 applications:
66 mongodb:
67- num_units: 3
68+ num_units: 1
69 options:
70 replicaset: testset
71 backup_directory: /var/backups
72+ nrpe:
73+ charm: cs:nrpe
74+ nagios:
75+ series: bionic
76+ charm: cs:nagios
77+ num_units: 1
78+
79+relations:
80+ - [mongodb, nrpe]
81+ - [nagios:monitors, nrpe]
82diff --git a/tests/functional/tests/bundles/focal-nrpe.yaml b/tests/functional/tests/bundles/focal-replicated.yaml
83similarity index 100%
84rename from tests/functional/tests/bundles/focal-nrpe.yaml
85rename to tests/functional/tests/bundles/focal-replicated.yaml
86diff --git a/tests/functional/tests/bundles/focal.yaml b/tests/functional/tests/bundles/focal.yaml
87index e485f5e..28da623 100644
88--- a/tests/functional/tests/bundles/focal.yaml
89+++ b/tests/functional/tests/bundles/focal.yaml
90@@ -2,7 +2,17 @@ series: focal
91 description: "mongodb-charm test bundle"
92 applications:
93 mongodb:
94- num_units: 3
95+ num_units: 1
96 options:
97 replicaset: testset
98 backup_directory: /var/backups
99+ nrpe:
100+ charm: cs:nrpe
101+ nagios:
102+ series: bionic
103+ charm: cs:nagios
104+ num_units: 1
105+
106+relations:
107+ - [mongodb, nrpe]
108+ - [nagios:monitors, nrpe]
109diff --git a/tests/functional/tests/tests.yaml b/tests/functional/tests/tests.yaml
110index d67bc5c..72347b4 100644
111--- a/tests/functional/tests/tests.yaml
112+++ b/tests/functional/tests/tests.yaml
113@@ -6,17 +6,27 @@ tests:
114 - tests.tests_mongodb.XenialMongodbCharmTest
115 - model_alias_bionic:
116 - tests.tests_mongodb.BasicMongodbCharmTest
117+ - tests.tests_mongodb.CharmOperationTest
118+ - model_alias_bionic_replicated:
119+ - tests.tests_mongodb.BasicMongodbCharmTest
120 - tests.tests_mongodb.ReplicatedMongodbCharmTest
121+ - tests.tests_mongodb.CharmOperationTest
122 - model_alias_focal:
123 - tests.tests_mongodb.BasicMongodbCharmTest
124+ - tests.tests_mongodb.CharmOperationTest
125+ - model_alias_focal_replicated:
126+ - tests.tests_mongodb.BasicMongodbCharmTest
127 - tests.tests_mongodb.ReplicatedMongodbCharmTest
128+ - tests.tests_mongodb.CharmOperationTest
129 - model_alias_shard:
130 - tests.tests_mongodb.ShardedMongodbCharmTest
131+ - tests.tests_mongodb.CharmOperationTest
132 gate_bundles:
133 - model_alias_xenial: xenial
134 - model_alias_bionic: bionic
135+ - model_alias_bionic_replicated: bionic-replicated
136 - model_alias_focal: focal
137- - model_alias_focal: focal-nrpe
138+ - model_alias_focal_replicated: focal-replicated
139 # - model_alias_shard: bionic-shard
140 smoke_bundles:
141 - model_alias_bionic: bionic
142diff --git a/tests/functional/tests/tests_mongodb.py b/tests/functional/tests/tests_mongodb.py
143index 019e5d7..3854cb5 100644
144--- a/tests/functional/tests/tests_mongodb.py
145+++ b/tests/functional/tests/tests_mongodb.py
146@@ -77,9 +77,9 @@ class BasicMongodbCharmTest(MongodbCharmTestBase):
147
148 def test_service_running(self):
149 """Test if we have a mongod running on all units."""
150- for i in (0, 1, 2):
151+ for unit in model.get_units("mongodb"):
152 running_for = model.get_unit_service_start_time(
153- "mongodb/{}".format(i), "mongod", timeout=20
154+ unit.entity_id, "mongod", timeout=20
155 )
156 self.assertGreater(running_for, 0)
157
158@@ -139,3 +139,52 @@ class ShardedMongodbCharmTest(MongodbCharmTestBase):
159 "mongodb/0", "mongos", timeout=20
160 )
161 self.assertGreater(running_for, 0)
162+
163+
164+class CharmOperationTest(MongodbCharmTestBase):
165+ """Verify charm operations."""
166+
167+ def test_01_nrpe_mongodb_check(self):
168+ """Verify mongodb is running."""
169+ expected_nrpe_check = (
170+ "command[check_mongodb]=/usr/local/lib/nagios/plugins/"
171+ "check_systemd.py mongodb"
172+ )
173+ cmd = "cat /etc/nagios/nrpe.d/check_mongodb.cfg"
174+ for unit in model.get_units("mongodb"):
175+ result = model.run_on_unit(unit.entity_id, cmd)
176+ code = result.get("Code")
177+ if code != "0":
178+ raise model.CommandRunFailed(cmd, result)
179+ content = result.get("Stdout")
180+ self.assertTrue(expected_nrpe_check in content)
181+
182+ def test_02_nrpe_check_replica_sets_status(self):
183+ """
184+ Verify that the NRPE replica sets status check is configured correctly.
185+ """
186+ expected_nrpe_check = (
187+ "command[check_replica_sets_status]=/usr/local/lib/nagios/"
188+ "plugins/check_replica_sets.py"
189+ )
190+ cmd = "cat /etc/nagios/nrpe.d/check_replica_sets_status.cfg"
191+ units = model.get_units("mongodb")
192+ if len(units) == 1:
193+ # Testing a single mongodb node deployment
194+ result = model.run_on_unit(units[0].entity_id, cmd)
195+ code = result.get("Code")
196+ # We expect this command to fail
197+ if code != "1":
198+ raise model.CommandRunFailed(cmd, result)
199+ content = result.get("Stderr")
200+ print(content)
201+ self.assertTrue("No such file or directory" in content)
202+ else:
203+ # Testing a replica set mongodb deployment
204+ for unit in units:
205+ result = model.run_on_unit(unit.entity_id, cmd)
206+ code = result.get("Code")
207+ if code != "0":
208+ raise model.CommandRunFailed(cmd, result)
209+ content = result.get("Stdout")
210+ self.assertTrue(expected_nrpe_check in content)

Subscribers

People subscribed via source and target branches

to all changes: