Filippo Giunchedi has submitted this change and it was merged.
Change subject: Make `es-tool ban-node` handle both IP addressses and hostnames
......................................................................
Make `es-tool ban-node` handle both IP addressses and hostnames
If it's IPv4, it goes into _ip.
Otherwise it's treated as a hostname and put in _host
Change-Id: Icabca481430e8830c2dae998c7876f9e9a3ec311
---
M modules/elasticsearch/files/es-tool
M modules/elasticsearch/manifests/init.pp
M modules/elasticsearch/manifests/packages.pp
3 files changed, 40 insertions(+), 26 deletions(-)
Approvals:
Filippo Giunchedi: Verified; Looks good to me, approved
jenkins-bot: Verified
diff --git a/modules/elasticsearch/files/es-tool
b/modules/elasticsearch/files/es-tool
index 10ff906..8a999a0 100755
--- a/modules/elasticsearch/files/es-tool
+++ b/modules/elasticsearch/files/es-tool
@@ -1,6 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import argparse
+import ipaddr
import os
import subprocess
import sys
@@ -49,17 +50,17 @@
return set_setting("cluster.routing.allocation.enable", status)
-def set_banned_ips(iplist):
- return set_setting("cluster.routing.allocation.exclude._ip",
- ",".join(iplist))
+def set_banned_nodes(nodelist, node_type):
+ return set_setting("cluster.routing.allocation.exclude." + node_type,
+ ",".join(nodelist))
-def get_banned_ips():
+def get_banned_nodes(node_type):
es = Elasticsearch(args.server)
res = es.cluster.get_settings()
try:
bannedstr = res["transient"]["cluster"]["routing"]["allocation"][
- "exclude"]["_ip"]
+ "exclude"][node_type]
if bannedstr:
return bannedstr.split(",")
except KeyError:
@@ -69,21 +70,27 @@
# Add new command functions here
def es_ban_node():
- if args.IP == "":
- print "No IP address provided"
+ if args.node == "":
+ print "No node provided"
return os.EX_UNAVAILABLE
- banned = get_banned_ips()
- if args.IP in banned:
- print args.IP + " already banned from allocation, nothing to do"
+ try:
+ ipaddr.IPv4Address(args.node)
+ node_type = "_ip"
+ except ipaddr.AddressValueError:
+ node_type = "_host"
+
+ banned = get_banned_nodes(node_type)
+ if args.node in banned:
+ print args.node + " already banned from allocation, nothing to do"
return os.EX_OK
- banned.append(args.IP)
- if set_banned_ips(banned):
- print "Banned " + args.IP
+ banned.append(args.node)
+ if set_banned_nodes(banned, node_type):
+ print "Banned " + args.node
return os.EX_OK
else:
- print "Failed to ban " + args.IP
+ print "Failed to ban " + args.node
return os.EX_UNAVAILABLE
@@ -180,21 +187,27 @@
def es_unban_node():
- if args.IP == "":
- print "No IP address provided"
+ if args.node == "":
+ print "No node provided"
return os.EX_UNAVAILABLE
- banned = get_banned_ips()
- if args.IP not in banned:
- print args.IP + " not banned from allocation currently, nothing to do"
+ try:
+ ipaddr.IPv4Address(args.node)
+ node_type = "_ip"
+ except ipaddr.AddressValueError:
+ node_type = "_host"
+
+ banned = get_banned_nodes(node_type)
+ if args.node not in banned:
+ print args.node + " not banned from allocation, nothing to do"
return os.EX_OK
- banned.remove(args.IP)
- if set_banned_ips(banned):
- print "Unbanned " + args.IP
+ banned.remove(args.node)
+ if set_banned_nodes(banned, node_type):
+ print "Unbanned " + args.node
return os.EX_OK
else:
- print "Failed to unban " + args.IP
+ print "Failed to unban " + args.node
return os.EX_UNAVAILABLE
# And register them here
@@ -214,8 +227,8 @@
parser.add_argument("command", metavar='CMD', type=str,
choices=commands.keys(),
help="Subcommand, one of: " + ",".join(commands))
-parser.add_argument("IP", metavar='IP', type=str, nargs="?", default="",
- help="IP address, used by (un)ban-node")
+parser.add_argument("node", metavar='NODE', type=str, nargs="?", default="",
+ help="IP address or hostname, used by (un)ban-node")
parser.add_argument("--server", metavar='S', type=str, default="localhost",
help="Server to work on, default localhost")
args = parser.parse_args()
diff --git a/modules/elasticsearch/manifests/init.pp
b/modules/elasticsearch/manifests/init.pp
index 6f85855..838db52 100644
--- a/modules/elasticsearch/manifests/init.pp
+++ b/modules/elasticsearch/manifests/init.pp
@@ -163,7 +163,7 @@
group => 'root',
mode => '0755',
source => 'puppet:///modules/elasticsearch/es-tool',
- require => Package['python-elasticsearch']
+ require => [Package['python-elasticsearch'],
Package['python-ipaddr']]
}
}
}
diff --git a/modules/elasticsearch/manifests/packages.pp
b/modules/elasticsearch/manifests/packages.pp
index f3757b1..45d61f9 100644
--- a/modules/elasticsearch/manifests/packages.pp
+++ b/modules/elasticsearch/manifests/packages.pp
@@ -23,5 +23,6 @@
# library for elasticsearch. only in trusty+
if os_version('ubuntu >= trusty') {
package { 'python-elasticsearch': ensure => present }
+ package { 'python-ipaddr': ensure => present }
}
}
--
To view, visit https://gerrit.wikimedia.org/r/180210
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Icabca481430e8830c2dae998c7876f9e9a3ec311
Gerrit-PatchSet: 5
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Chad <[email protected]>
Gerrit-Reviewer: Andrew Bogott <[email protected]>
Gerrit-Reviewer: Chad <[email protected]>
Gerrit-Reviewer: Filippo Giunchedi <[email protected]>
Gerrit-Reviewer: Manybubbles <[email protected]>
Gerrit-Reviewer: Matanya <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits