8d9b7fdd2b
This is to fix the command to connect to the cluster name instead of namesapce. Change-Id: I8b8f7c10d7667245a8f6cb02fb5b69dd122099e5
51 lines
2.4 KiB
Smarty
51 lines
2.4 KiB
Smarty
#!/usr/bin/python
|
|
import re
|
|
import os
|
|
import subprocess # nosec
|
|
import json
|
|
|
|
MON_REGEX = r"^\d: ([0-9\.]*):\d+/\d* mon.([^ ]*)$"
|
|
# kubctl_command = 'kubectl get pods --namespace=${NAMESPACE} -l component=mon,application=ceph -o template --template="{ {{"}}"}}range .items{{"}}"}} \\"{{"}}"}}.metadata.name{{"}}"}}\\": \\"{{"}}"}}.status.podIP{{"}}"}}\\" , {{"}}"}}end{{"}}"}} }"'
|
|
if int(os.getenv('K8S_HOST_NETWORK', 0)) > 0:
|
|
kubectl_command = 'kubectl get pods --namespace=${NAMESPACE} -l component=mon,application=ceph -o template --template="{ {{"{{"}}range \$i, \$v := .items{{"}}"}} {{"{{"}} if \$i{{"}}"}} , {{"{{"}} end {{"}}"}} \\"{{"{{"}}\$v.spec.nodeName{{"}}"}}\\": \\"{{"{{"}}\$v.status.podIP{{"}}"}}\\" {{"{{"}}end{{"}}"}} }"'
|
|
else:
|
|
kubectl_command = 'kubectl get pods --namespace=${NAMESPACE} -l component=mon,application=ceph -o template --template="{ {{"{{"}}range \$i, \$v := .items{{"}}"}} {{"{{"}} if \$i{{"}}"}} , {{"{{"}} end {{"}}"}} \\"{{"{{"}}\$v.metadata.name{{"}}"}}\\": \\"{{"{{"}}\$v.status.podIP{{"}}"}}\\" {{"{{"}}end{{"}}"}} }"'
|
|
|
|
monmap_command = "ceph --cluster=${CLUSTER} mon getmap > /tmp/monmap && monmaptool -f /tmp/monmap --print"
|
|
|
|
|
|
def extract_mons_from_monmap():
|
|
monmap = subprocess.check_output(monmap_command, shell=True) # nosec
|
|
mons = {}
|
|
for line in monmap.split("\n"):
|
|
m = re.match(MON_REGEX, line)
|
|
if m is not None:
|
|
mons[m.group(2)] = m.group(1)
|
|
return mons
|
|
|
|
def extract_mons_from_kubeapi():
|
|
kubemap = subprocess.check_output(kubectl_command, shell=True) # nosec
|
|
return json.loads(kubemap)
|
|
|
|
current_mons = extract_mons_from_monmap()
|
|
expected_mons = extract_mons_from_kubeapi()
|
|
|
|
print("current mons: %s" % current_mons)
|
|
print("expected mons: %s" % expected_mons)
|
|
|
|
removed_mon = False
|
|
for mon in current_mons:
|
|
if not mon in expected_mons:
|
|
print("removing zombie mon %s" % mon)
|
|
subprocess.call(["ceph", "--cluster", os.environ["NAMESPACE"], "mon", "remove", mon]) # nosec
|
|
removed_mon = True
|
|
elif current_mons[mon] != expected_mons[mon]: # check if for some reason the ip of the mon changed
|
|
print("ip change detected for pod %s" % mon)
|
|
subprocess.call(["kubectl", "--namespace", os.environ["NAMESPACE"], "delete", "pod", mon]) # nosec
|
|
removed_mon = True
|
|
print("deleted mon %s via the kubernetes api" % mon)
|
|
|
|
|
|
if not removed_mon:
|
|
print("no zombie mons found ...")
|