Page MenuHomePhabricator

Move cloud vps ns-recursor IPs to host/row-independent addressing
Closed, ResolvedPublic

Description

Currently Cloud VPS DNS recursors use simple reserved VIPs (one extra VIP per cloudservices* box) from the row-specific public1 subnets. This has some downsides:

  • Requiring that cloudservices* hosts have public addresses in a specific physical DC row
  • No failover when rebooting hosts
    • This point is especially problematic since surprisingly{{cn}} many DNS implementations will misbehave when the first listed recursor is down

This task is here to investigate if we can replace the current system with something (LVS, Anycast, ...) that addresses those problems. Note that the same hosts also host the auth dns for WMCS domains using their primary (public) IP addresses.

see also: T207533: Move labs-recursors in WMCS T119660: Set up LVS for labs dns recursors

Current work is to implement this layout:

cloudservices2004-dev

Interface IPs, same as every other cloud host:

InterfaceIPVlanDomain
eno110.192.20.26/24cloud-hosts1-codfwcloudservices2004-dev.codfw.wmnet
vlan2151@eno1172.20.5.8/24cloud-private-b1-codfwcloudservices2004-dev.private.codfw.wikimedia.cloud

BGP IPs announced to 172.20.5.1 over vlan2151:

IPDNSDescription
185.15.57.25ns0.openstack.codfw1dev.wikimediacloud.orgpdns_server listens on this, pdns_recursor uses it for outbound queries
172.20.254.1ns-recursor.openstack.codfw1dev.wikimediacloud.orgpdns_recursor listens on this for client queries

cloudservices2005-dev

Interface IPs, same as every other cloud host:

InterfaceIPVlanDomain
eno110.192.20.27/24cloud-hosts1-codfwcloudservices2005-dev.codfw.wmnet
vlan2151@eno1172.20.5.9/24cloud-private-b1-codfwcloudservices2005-dev.private.codfw.wikimedia.cloud

BGP IPs announced to 172.20.5.1 over vlan2151:

IPDNSDescription
185.15.57.26ns1.openstack.codfw1dev.wikimediacloud.orgpdns_server listens on this, pdns_recursor uses it for outbound queries
172.20.254.1ns-recursor.openstack.codfw1dev.wikimediacloud.orgpdns_recursor listens on this for client queries

Details

SubjectRepoBranchLines +/-
operations/dnsmaster+0 -5
operations/homer/publicmaster+0 -52
operations/software/netbox-extrasmaster+1 -0
operations/dnsmaster+1 -1
operations/dnsmaster+2 -3
operations/puppetproduction+2 -3
operations/puppetproduction+7 -0
operations/puppetproduction+13 -4
operations/puppetproduction+2 -4
operations/puppetproduction+1 -19
operations/puppetproduction+2 -3
operations/dnsmaster+0 -6
operations/dnsmaster+0 -4
operations/dnsmaster+4 -2
operations/dnsmaster+2 -1
operations/dnsmaster+2 -3
operations/dnsmaster+0 -4
operations/puppetproduction+4 -9
operations/puppetproduction+10 -4
operations/puppetproduction+1 -1
operations/puppetproduction+10 -13
operations/puppetproduction+6 -18
operations/puppetproduction+16 -6
operations/puppetproduction+14 -6
operations/dnsmaster+7 -15
operations/homer/publicmaster+1 -0
operations/puppetproduction+10 -1
operations/puppetproduction+10 -2
operations/puppetproduction+10 -9
operations/puppetproduction+16 -0
operations/dnsmaster+4 -0
Show related patches Customize query in gerrit

Related Objects

StatusSubtypeAssignedTask
ResolvedPapaul
Resolvedaborrero
Resolvedaborrero
Resolvedaborrero
Resolvedaborrero
Resolvedayounsi
Resolvedcmooney
ResolvedPapaul
Resolvedcmooney
Resolvedcmooney
Resolvedaborrero
Resolvedaborrero
Resolvedaborrero
Resolvedtaavi
Opencmooney
Resolvedaborrero
Opencmooney
Resolvedaborrero
Resolvedaborrero
Resolvedaborrero
Resolvedaborrero
Resolvedaborrero
ResolvedAndrew
ResolvedAndrew
ResolvedAndrew
OpenAndrew
OpenAndrew
ResolvedAndrew
Resolvedaborrero
OpenNone
OpenNone
Resolvedaborrero
Resolvedcmooney
Resolvedaborrero
Resolvedaborrero
InvalidNone
Resolvedaborrero
Resolvedaborrero
OpenNone
Resolvedaborrero
Invalidaborrero
Resolvedaborrero
Resolvedfgiunchedi
Resolvedaborrero
Invalidaborrero
Openaborrero
Resolvedcmooney

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

The current implementation on codfw1dev seems to have forgotten that the recursors need outbound access to the public internet to perform recursive queries. Right now the only public address on the DNS servers is the ns.openstack.codfw1dev.wikimediacloud.org VIP, which can't be used for this purpose as queries sent via it won't be routed consistently back (as they might be routed to the other anycast backends).

aborrero changed the task status from Stalled to Open.Jun 13 2023, 4:32 PM
aborrero moved this task from Radar to Doing on the User-aborrero board.

The current implementation on codfw1dev seems to have forgotten that the recursors need outbound access to the public internet to perform recursive queries. Right now the only public address on the DNS servers is the ns.openstack.codfw1dev.wikimediacloud.org VIP, which can't be used for this purpose as queries sent via it won't be routed consistently back (as they might be routed to the other anycast backends).

That's a very good point yeah. The recursors will need their own unique public IPs to source external queries from. I'd thought about this before but somehow didn't cop during the most recent discussion when we opted for anycast.

@aborrero we can assign a new, unique public IP to each. If it simplifies things we can maybe discard the Anycast IP for the recursor service, and configure clients with multiple IPs (each belonging to a separate cloudservice node). That may make the dns service easier to config, as you tell it to only listen on a single IP, which it also uses to make outbound queries.

Alternately we can keep the private anycast IP in play, and clients can continue to send queries to that. As long as the recursor can be configured to use its unique public IP for outbound connections that will work.

@aborrero I discussed the idea of a dedicated cloud-public vlan on the wikitech page previously.

TL;DR its not ideal as it burns a load of public IP addresses. But we may need to do it if there is no way to tell designate "this is the IP to use for outbound requests".

@aborrero I discussed the idea of a dedicated cloud-public vlan on the wikitech page previously.

TL;DR its not ideal as it burns a load of public IP addresses. But we may need to do it if there is no way to tell designate "this is the IP to use for outbound requests".

I think that's the query-local-addressoption. Upstream docs:

Similar to this https://gerrit.wikimedia.org/r/c/operations/puppet/+/929739/ patch merged yesterday which I believe was what triggered @taavi into raising this problem.

Could you describe the setup you have in mind? Would it be a static public IPv4 address /32 per server plus a route in the cloudsw route?
If so, what would be the benefit of the BGP thingy?

I think that's the query-local-addressoption. Upstream docs:

That's it yep.

Similar to this https://gerrit.wikimedia.org/r/c/operations/puppet/+/929739/ patch merged yesterday which I believe was what triggered @taavi into raising this problem.

Seems like that is how we can set it from puppet yep.

Could you describe the setup you have in mind? Would it be a static public IPv4 address /32 per server plus a route in the cloudsw route?

We assign a new unique /32 IP address to each cloudservice node in Netbox, and have each of them announce this to the switch with BGP, in addition to the two VIPs they are already announcing.

If so, what would be the benefit of the BGP thingy?

It saves IP addresses as discussed. For instance in eqiad assuming we put the two servers in different racks we need to use at least 16 IP addresses to create 2 cloud-private subnets. With this approach we only use 2 IPs not 16, and it fits neatly into the setup we use for Anycast VIPs.

Could you describe the setup you have in mind? Would it be a static public IPv4 address /32 per server plus a route in the cloudsw route?

We assign a new unique /32 IP address to each cloudservice node in Netbox, and have each of them announce this to the switch with BGP, in addition to the two VIPs they are already announcing.

If so, what would be the benefit of the BGP thingy?

It saves IP addresses as discussed. For instance in eqiad assuming we put the two servers in different racks we need to use at least 16 IP addresses to create 2 cloud-private subnets. With this approach we only use 2 IPs not 16, and it fits neatly into the setup we use for Anycast VIPs.

This is what I'm understanding of your proposal:

  • cloudservices2004-dev.codfw.wmnet <-- for SSH, puppet, etc
    • cloudservices2004-dev.private.codfw.wikimedia.cloud <-- address in cloud-private subnet for comms with the rest of the openstack services
    • query-local-address.cloudservices2004-dev.openstack.codfw1dev.wikimediacloud.org <-- public IPv4 address used for outbound recursive queries. BGP announced (but not shared).
    • ns.openstack.codfw1dev.wikimediacloud.org <-- public IPv4 address used for auth DNS, BGP announced and shared with the other node.
    • ns-recursor.openstack.codfw1dev.wikimediacloud.org <-- priv IPv4 address used for recursor DNS, BGP announced and shared with the other node.
  • cloudservices2005-dev.codfw.wmnet <-- for SSH, puppet, etc
    • cloudservices2005-dev.private.codfw.wikimedia.cloud <-- address in cloud-private subnet for comms with the rest of the openstack services
    • query-local-address.cloudservices2005-dev.openstack.codfw1dev.wikimediacloud.org <-- public IPv4 address used for outbound recursive queries. BGP announced (but not shared).
    • ns.openstack.codfw1dev.wikimediacloud.org <-- public IPv4 address used for auth DNS, BGP announced and shared with the other node.
    • ns-recursor.openstack.codfw1dev.wikimediacloud.org <-- priv IPv4 address used for recursor DNS, BGP announced and shared with the other node.

My point is that we could go with the 2 public IPv4 addresses for both recursive and authoritative and that would be a way simpler setup.

I think I'm proposing this:

  • cloudservices2004-dev.codfw.wmnet <-- for SSH, puppet, etc
    • cloudservices2004-dev.private.codfw.wikimedia.cloud <-- address in cloud-private subnet for comms with the rest of the openstack services
    • ns0.openstack.codfw1dev.wikimediacloud.org <-- public IPv4 address used for both auth and recursor. BGP announced (but not shared) to don't waste IPv4 and to make it row-independent
  • cloudservices2005-dev.codfw.wmnet <-- for SSH, puppet, etc
    • cloudservices2005-dev.private.codfw.wikimedia.cloud <-- address in cloud-private subnet for comms with the rest of the openstack services
    • ns1.openstack.codfw1dev.wikimediacloud.org <-- public IPv4 address used for both auth and recursor. BGP announced (but not shared) to don't waste IPv4 and to make it row-independent

Note the single BGP address (not shared) per server works for everything, auth and recursor DNS.

I think I'm proposing this:

Talking with @taavi on IRC, he pointed that udp 53 can't be used for both auth and recursor without significant rework of the PDNS setup we have.

So, adding the shared address for the recursor it would be:

  • cloudservices2004-dev.codfw.wmnet <-- for SSH, puppet, etc
    • cloudservices2004-dev.private.codfw.wikimedia.cloud <-- address in cloud-private subnet for comms with the rest of the openstack services
    • ns-recursor.openstack.codfw1dev.wikimediacloud.org <-- priv IPv4 address used for recursor DNS, BGP announced and shared with the other node. (existing)
    • ns0.openstack.codfw1dev.wikimediacloud.org <-- public IPv4 address used for both auth and recursor query-local-address. BGP announced (but not shared) to don't waste IPv4 and to make it row-independent (net new)
  • cloudservices2005-dev.codfw.wmnet <-- for SSH, puppet, etc
    • cloudservices2005-dev.private.codfw.wikimedia.cloud <-- address in cloud-private subnet for comms with the rest of the openstack services
    • ns-recursor.openstack.codfw1dev.wikimediacloud.org <-- priv IPv4 address used for recursor DNS, BGP announced and shared with the other node. (existing)
    • ns1.openstack.codfw1dev.wikimediacloud.org <-- public IPv4 address used for both auth and recursor query-local-address. BGP announced (but not shared) to don't waste IPv4 and to make it row-independent (net new)

My point is that we could go with the 2 public IPv4 addresses for both recursive and authoritative and that would be a way simpler setup.

Sure. That was my original proposal on the enhancement page, but I now realise it can't work quite like that. The problem is the pdns_server and pdns_recursor cannot both bind to <public_ip>:53. You need to have two separate IPs for the two daemons to co-exist listening on the same port.

The best way to address that constraint, I think, is to keep the 172.20.254.1/32 Anycast VIP as the IP the recursor listens on.

We can move away from the Anycast setup for the auth dns service though, assigning a unique IP per server, and moving back to having the NS1/NS2 entries in the parent zone.

There is no problem re-using this IP on each server for the recursor to use outbound with query-local-address.

Example

So what you ned up with looks something like this.

cloudservices2004-dev

Interface IPs, same as every other cloud host:

InterfaceIPVlanDomain
eno110.192.20.26/24cloud-hosts1-codfwcloudservices2004-dev.codfw.wmnet
vlan2151@eno1172.20.5.8/24cloud-private-b1-codfwcloudservices2004-dev.private.codfw.wikimedia.cloud

BGP IPs announced to 172.20.5.1 over vlan2151:

IPDNSDescription
185.15.57.25ns0.openstack.codfw1dev.wikimediacloud.orgpdns_server listens on this, pdns_recursor uses it for outbound queries
172.20.254.1ns-recursor.openstack.codfw1dev.wikimediacloud.orgpdns_recursor listens on this for client queries

cloudservices2005-dev

Interface IPs, same as every other cloud host:

InterfaceIPVlanDomain
eno110.192.20.27/24cloud-hosts1-codfwcloudservices2005-dev.codfw.wmnet
vlan2151@eno1172.20.5.9/24cloud-private-b1-codfwcloudservices2005-dev.private.codfw.wikimedia.cloud

BGP IPs announced to 172.20.5.1 over vlan2151:

IPDNSDescription
185.15.57.26ns1.openstack.codfw1dev.wikimediacloud.orgpdns_server listens on this, pdns_recursor uses it for outbound queries
172.20.254.1ns-recursor.openstack.codfw1dev.wikimediacloud.orgpdns_recursor listens on this for client queries

Ok, I think we are in the same page!

Change 930170 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/puppet@production] openstack: codfw1dev: services: add support for BGP public IPv4 addresses

https://gerrit.wikimedia.org/r/930170

Change 930170 merged by Arturo Borrero Gonzalez:

[operations/puppet@production] openstack: codfw1dev: services: add support for BGP public IPv4 addresses

https://gerrit.wikimedia.org/r/930170

Change 930210 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/puppet@production] cloudservices2005-dev: fix DNS address

https://gerrit.wikimedia.org/r/930210

Change 930212 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/puppet@production] cloudservices2004-dev: put into service with new setup

https://gerrit.wikimedia.org/r/930212

Change 930212 merged by Arturo Borrero Gonzalez:

[operations/puppet@production] cloudservices2004-dev: put into service with new setup

https://gerrit.wikimedia.org/r/930212

Change 930556 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/puppet@production] openstack: codfw1dev: pdns: use modern auth server for forward zones

https://gerrit.wikimedia.org/r/930556

Change 930556 merged by Arturo Borrero Gonzalez:

[operations/puppet@production] openstack: codfw1dev: pdns: use modern auth server for forward zones

https://gerrit.wikimedia.org/r/930556

Change 930616 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/puppet@production] openstack: pdns: recursor: drop IPv6 support

https://gerrit.wikimedia.org/r/930616

Change 930616 merged by Arturo Borrero Gonzalez:

[operations/puppet@production] openstack: pdns: recursor: drop IPv6 support

https://gerrit.wikimedia.org/r/930616

Change 930642 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/puppet@production] openstack: pdns: recursor: make it listen in the right address

https://gerrit.wikimedia.org/r/930642

Change 930642 merged by Arturo Borrero Gonzalez:

[operations/puppet@production] openstack: pdns: recursor: make it listen in the right address

https://gerrit.wikimedia.org/r/930642

Change 930647 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/dns@master] wikimediacloud.org: codfw1dev: drop IPv6 records for DNS services

https://gerrit.wikimedia.org/r/930647

Change 930648 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/dns@master] wikimediacloud.org: eqiad1: drop IPv6 records for DNS services

https://gerrit.wikimedia.org/r/930648

Change 930654 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/puppet@production] acme_chief: openstack: codfw1dev: allow cloudservices2004-dev

https://gerrit.wikimedia.org/r/930654

Change 930654 abandoned by Arturo Borrero Gonzalez:

[operations/puppet@production] acme_chief: openstack: codfw1dev: allow cloudservices2004-dev

Reason:

will try something different

https://gerrit.wikimedia.org/r/930654

Change 930661 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/puppet@production] acme_chief: openstack: codfw1dev: refresh LDAP certificates

https://gerrit.wikimedia.org/r/930661

Change 930661 merged by Arturo Borrero Gonzalez:

[operations/puppet@production] acme_chief: openstack: codfw1dev: refresh LDAP certificates

https://gerrit.wikimedia.org/r/930661

I just deleted netbox objects for IPv6:

  • 2620:0:860:2:208:80:153:47
  • 2620:0:860:2:208:80:153:50

Change 930647 merged by Arturo Borrero Gonzalez:

[operations/dns@master] wikimediacloud.org: codfw1dev: drop IPv6 records for DNS services

https://gerrit.wikimedia.org/r/930647

Change 930791 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/dns@master] wikimediacloud.org: refresh ns0.openstack.codfw1dev address

https://gerrit.wikimedia.org/r/930791

Change 930792 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/dns@master] wikimedia.cloud: fix delegation for codfw1dev

https://gerrit.wikimedia.org/r/930792

Change 930791 merged by Arturo Borrero Gonzalez:

[operations/dns@master] wikimediacloud.org: refresh ns0.openstack.codfw1dev address

https://gerrit.wikimedia.org/r/930791

Change 930792 merged by Arturo Borrero Gonzalez:

[operations/dns@master] wikimedia.cloud: fix delegation for codfw1dev

https://gerrit.wikimedia.org/r/930792

Change 930805 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/dns@master] 57.15.185.in-addr.arpa: fix delegation

https://gerrit.wikimedia.org/r/930805

Change 930805 merged by Arturo Borrero Gonzalez:

[operations/dns@master] 57.15.185.in-addr.arpa: fix delegation

https://gerrit.wikimedia.org/r/930805

Change 930807 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/puppet@production] openstack: pdns: auth: service: drop IPv6 support

https://gerrit.wikimedia.org/r/930807

Deleting DNS name from the IPv6:

Change 930808 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/dns@master] wikimediacloud.org: drop unused ns-recursor[0,1] FQDNs

https://gerrit.wikimedia.org/r/930808

Deleting DNS entries for:

Change 930808 merged by Arturo Borrero Gonzalez:

[operations/dns@master] wikimediacloud.org: drop unused ns-recursor[0,1] FQDNs

https://gerrit.wikimedia.org/r/930808

Change 930648 merged by Arturo Borrero Gonzalez:

[operations/dns@master] wikimediacloud.org: eqiad1: drop IPv6 records for DNS services

https://gerrit.wikimedia.org/r/930648

Change 930807 merged by Arturo Borrero Gonzalez:

[operations/puppet@production] openstack: pdns: auth: service: drop IPv6 support

https://gerrit.wikimedia.org/r/930807

Change 930817 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/puppet@production] openstack: codfw1dev: make designate use cloud-private address by default

https://gerrit.wikimedia.org/r/930817

Change 930817 merged by Arturo Borrero Gonzalez:

[operations/puppet@production] openstack: codfw1dev: make designate use cloud-private address by default

https://gerrit.wikimedia.org/r/930817

Change 930818 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/puppet@production] openstack: codfw1dev: designate: fix recursor_service_name

https://gerrit.wikimedia.org/r/930818

Change 930820 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/puppet@production] openstack: codfw1dev: more hiera adjustements

https://gerrit.wikimedia.org/r/930820

Change 930818 merged by Arturo Borrero Gonzalez:

[operations/puppet@production] openstack: codfw1dev: designate: fix recursor_service_name

https://gerrit.wikimedia.org/r/930818

Change 930820 merged by Arturo Borrero Gonzalez:

[operations/puppet@production] openstack: codfw1dev: more hiera adjustements

https://gerrit.wikimedia.org/r/930820

Mentioned in SAL (#wikimedia-cloud) [2023-06-19T08:39:11Z] <arturo> update delegation for codfw1dev.wmcloud.org. to point to ns0/ns1 T307357

Change 931239 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/puppet@production] dnsrecursor: introduce query-local-address parameter

https://gerrit.wikimedia.org/r/931239

Change 931239 merged by Arturo Borrero Gonzalez:

[operations/puppet@production] dnsrecursor: introduce query-local-address parameter

https://gerrit.wikimedia.org/r/931239

Change 931589 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/dns@master] wikimediacloud.org: refresh A for ns1.openstack.codfw1dev.wikimediacloud.org

https://gerrit.wikimedia.org/r/931589

Change 931590 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/dns@master] wikimediacloud.org: cleanup for ns.openstack.codfw1dev.wikimediacloud.org

https://gerrit.wikimedia.org/r/931590

Change 930210 abandoned by Arturo Borrero Gonzalez:

[operations/puppet@production] cloudservices2005-dev: fix DNS address

Reason:

merged with Ie9b38e58bca4fc152b54fa1efbb1e1d75040430c

https://gerrit.wikimedia.org/r/930210

Change 931590 merged by Arturo Borrero Gonzalez:

[operations/dns@master] wikimediacloud.org: cleanup for ns.openstack.codfw1dev.wikimediacloud.org

https://gerrit.wikimedia.org/r/931590

Change 931589 merged by Arturo Borrero Gonzalez:

[operations/dns@master] wikimediacloud.org: refresh A for ns1.openstack.codfw1dev.wikimediacloud.org

https://gerrit.wikimedia.org/r/931589

Change 932794 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/software/netbox-extras@master] reports/network: ignore IPv6 for cloudservices boxes

https://gerrit.wikimedia.org/r/932794

Change 932794 merged by Arturo Borrero Gonzalez:

[operations/software/netbox-extras@master] reports/network: ignore IPv6 for cloudservices boxes

https://gerrit.wikimedia.org/r/932794

Change 957745 had a related patch set uploaded (by Arturo Borrero Gonzalez; author: Arturo Borrero Gonzalez):

[operations/dns@master] wikimediacloud.org: decom ns-recursor0.openstack.eqiad1.wikimediacloud.org

https://gerrit.wikimedia.org/r/957745

aborrero claimed this task.

Change 961054 had a related patch set uploaded (by Majavah; author: Majavah):

[operations/homer/public@master] cr-cloud: Remove unused terms

https://gerrit.wikimedia.org/r/961054

Change 961054 merged by jenkins-bot:

[operations/homer/public@master] cr-cloud: Remove unused terms

https://gerrit.wikimedia.org/r/961054