f398d73c53
This PS cleans up the entrypoint scripts to remove unrequired functions. Change-Id: Ibc445e422c1ebad972de59b47955511d14dd6d3c
51 lines
2.3 KiB
Smarty
51 lines
2.3 KiB
Smarty
#!/usr/bin/python2
|
|
import re
|
|
import os
|
|
import subprocess
|
|
import json
|
|
|
|
MON_REGEX = r"^\d: ([0-9\.]*):\d+/\d* mon.([^ ]*)$"
|
|
# kubctl_command = 'kubectl get pods --namespace=${NAMESPACE} -l component=mon -l 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 -l 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 -l 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)
|
|
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)
|
|
return json.loads(kubemap)
|
|
|
|
current_mons = extract_mons_from_monmap()
|
|
expected_mons = extract_mons_from_kubeapi()
|
|
|
|
print "current mons:", current_mons
|
|
print "expected mons:", expected_mons
|
|
|
|
for mon in current_mons:
|
|
removed_mon = False
|
|
if not mon in expected_mons:
|
|
print "removing zombie mon ", mon
|
|
subprocess.call(["ceph", "--cluster", os.environ["CLUSTER"], "mon", "remove", mon])
|
|
removed_mon = True
|
|
elif current_mons[mon] != expected_mons[mon]: # check if for some reason the ip of the mon changed
|
|
print "ip change dedected for pod ", mon
|
|
subprocess.call(["kubectl", "--namespace", os.environ["CLUSTER"], "delete", "pod", mon])
|
|
removed_mon = True
|
|
print "deleted mon %s via the kubernetes api" % mon
|
|
|
|
|
|
if not removed_mon:
|
|
print "no zombie mons found ..."
|