Consul should allow to disable monitored services
As part of our migration from repmgr
to patroni
, we will need to disable the repmgr
specific consul service monitoring, as postgresql is not managed by it anymore.
The repmgr based installation instruction include this line:
consul['services'] = %w(postgresql)
which when running gitlab-reconfigure
for the first time will make the following changes:
Recipe: consul::service_postgresql
* file[/var/opt/gitlab/consul/config.d/postgresql_service.json] action create
- create new file /var/opt/gitlab/consul/config.d/postgresql_service.json
- update content in file /var/opt/gitlab/consul/config.d/postgresql_service.json from none to 470b1f
--- /var/opt/gitlab/consul/config.d/postgresql_service.json 2020-08-14 02:18:04.537685875 +0000
+++ /var/opt/gitlab/consul/config.d/.chef-postgresql_service20200814-1005573-ebof6u.json 2020-08-14 02:18:04.537685875 +0000
@@ -1 +1,2 @@
+{"service":{"name":"postgresql","address":"","port":5432,"check":{"id":"service:postgresql","interval":"10s","status":"failing","args":["/opt/gitlab/bin/gitlab-ctl","repmgr-check-master"]}},"watches":[{"type":"keyprefix","prefix":"gitlab/ha/postgresql/failed_masters/"
,"args":["/opt/gitlab/bin/gitlab-ctl","consul","watchers","handle-failed-master"]}]}
- change owner from '' to 'gitlab-consul'
Recipe: repmgr::consul_user_permissions
* postgresql_user[gitlab-consul] action create
* execute[create gitlab-consul postgresql user] action run
[execute] CREATE ROLE
- execute /opt/gitlab/bin/gitlab-psql -d template1 -c "CREATE USER \"gitlab-consul\""
based on the logic in our cookbooks that control what service are enabled (http://gitlab.com/gitlab-org/omnibus-gitlab/blob/811ca04ec932411b1b21eeb63d6ff4b21a3d386c/files/gitlab-cookbooks/consul/recipes/enable.rb#L64-66):
node['consul']['services'].each do |service|
include_recipe "consul::service_#{service}"
end
what is missing here is a disable
version of that recipe.
Proposal
Keep a constant with a list of all available consul services and intersect that with node['consul']['services']
to see what is not enabled. For those, we should execute the "disable" version of the recipe.
Currently there is only one service: postgresql
which makes this a very simple change.