summaryrefslogtreecommitdiffstats
path: root/kubernetes/readiness/docker/init
diff options
context:
space:
mode:
Diffstat (limited to 'kubernetes/readiness/docker/init')
-rw-r--r--kubernetes/readiness/docker/init/job_complete.py23
-rw-r--r--kubernetes/readiness/docker/init/ready.py58
2 files changed, 58 insertions, 23 deletions
diff --git a/kubernetes/readiness/docker/init/job_complete.py b/kubernetes/readiness/docker/init/job_complete.py
index b20cb5adec..a9570c5951 100644
--- a/kubernetes/readiness/docker/init/job_complete.py
+++ b/kubernetes/readiness/docker/init/job_complete.py
@@ -20,7 +20,8 @@ with open(token_path, 'r') as token_file:
# setup logging
log = logging.getLogger(__name__)
handler = logging.StreamHandler(sys.stdout)
-handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
+formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
+handler.setFormatter(formatter)
handler.setLevel(logging.INFO)
log.addHandler(handler)
log.setLevel(logging.INFO)
@@ -54,17 +55,22 @@ def is_job_complete(job_name):
DEF_TIMEOUT = 10
DESCRIPTION = "Kubernetes container job complete check utility"
-USAGE = "Usage: job_complete.py [-t <timeout>] -j <job_name> [-j <job_name> ...]\n" \
+USAGE = "Usage: job_complete.py [-t <timeout>] -j <job_name> " \
+ "[-j <job_name> ...]\n" \
"where\n" \
- "<timeout> - wait for container job complete timeout in min, default is " + str(DEF_TIMEOUT) + "\n" \
+ "<timeout> - wait for container job complete timeout in min, " \
+ "default is " + str(DEF_TIMEOUT) + "\n" \
"<job_name> - name of the job to wait for\n"
+
def main(argv):
# args are a list of job names
job_names = []
timeout = DEF_TIMEOUT
try:
- opts, args = getopt.getopt(argv, "hj:t:", ["job-name=", "timeout=", "help"])
+ opts, args = getopt.getopt(argv, "hj:t:", ["job-name=",
+ "timeout=",
+ "help"])
for opt, arg in opts:
if opt in ("-h", "--help"):
print("%s\n\n%s" % (DESCRIPTION, USAGE))
@@ -89,11 +95,14 @@ def main(argv):
if complete is True:
break
elif time.time() > timeout:
- log.warning("timed out waiting for '" + job_name + "' to be completed")
+ log.warning("timed out waiting for '" + job_name +
+ "' to be completed")
exit(1)
else:
- # spread in time potentially parallel execution in multiple containers
+ # spread in time potentially parallel execution in multiple
+ # containers
time.sleep(random.randint(5, 11))
+
if __name__ == "__main__":
- main(sys.argv[1:]) \ No newline at end of file
+ main(sys.argv[1:])
diff --git a/kubernetes/readiness/docker/init/ready.py b/kubernetes/readiness/docker/init/ready.py
index 0e133eab01..db7105a18d 100644
--- a/kubernetes/readiness/docker/init/ready.py
+++ b/kubernetes/readiness/docker/init/ready.py
@@ -20,7 +20,8 @@ with open(token_path, 'r') as token_file:
# setup logging
log = logging.getLogger(__name__)
handler = logging.StreamHandler(sys.stdout)
-handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
+formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
+handler.setFormatter(formatter)
handler.setLevel(logging.INFO)
log.addHandler(handler)
log.setLevel(logging.INFO)
@@ -31,14 +32,14 @@ configuration.ssl_ca_cert = cert
configuration.api_key['authorization'] = token
configuration.api_key_prefix['authorization'] = 'Bearer'
coreV1Api = client.CoreV1Api(client.ApiClient(configuration))
-api_instance=client.ExtensionsV1beta1Api(client.ApiClient(configuration))
+api_instance = client.ExtensionsV1beta1Api(client.ApiClient(configuration))
api = client.AppsV1beta1Api(client.ApiClient(configuration))
batchV1Api = client.BatchV1Api(client.ApiClient(configuration))
+
def is_job_complete(job_name):
complete = False
log.info("Checking if " + job_name + " is complete")
- response = ""
try:
response = batchV1Api.read_namespaced_job_status(job_name, namespace)
if response.status.succeeded == 1:
@@ -54,11 +55,12 @@ def is_job_complete(job_name):
except Exception as e:
log.error("Exception when calling read_namespaced_job_status: %s\n" % e)
+
def wait_for_statefulset_complete(statefulset_name):
try:
response = api.read_namespaced_stateful_set(statefulset_name, namespace)
s = response.status
- if ( s.updated_replicas == response.spec.replicas and
+ if (s.updated_replicas == response.spec.replicas and
s.replicas == response.spec.replicas and
s.ready_replicas == response.spec.replicas and
s.current_replicas == response.spec.replicas and
@@ -71,11 +73,12 @@ def wait_for_statefulset_complete(statefulset_name):
except Exception as e:
log.error("Exception when waiting for Statefulset status: %s\n" % e)
+
def wait_for_deployment_complete(deployment_name):
try:
response = api.read_namespaced_deployment(deployment_name, namespace)
s = response.status
- if ( s.unavailable_replicas == None and
+ if (s.unavailable_replicas is None and
s.updated_replicas == response.spec.replicas and
s.replicas == response.spec.replicas and
s.ready_replicas == response.spec.replicas and
@@ -88,24 +91,27 @@ def wait_for_deployment_complete(deployment_name):
except Exception as e:
log.error("Exception when waiting for deployment status: %s\n" % e)
+
def is_ready(container_name):
ready = False
log.info("Checking if " + container_name + " is ready")
try:
- response = coreV1Api.list_namespaced_pod(namespace=namespace, watch=False)
+ response = coreV1Api.list_namespaced_pod(namespace=namespace,
+ watch=False)
for i in response.items:
# container_statuses can be None, which is non-iterable.
if i.status.container_statuses is None:
continue
for s in i.status.container_statuses:
if s.name == container_name:
- if i.metadata.owner_references[0].kind == "StatefulSet":
- ready = wait_for_statefulset_complete(i.metadata.owner_references[0].name)
+ name = read_name(i)
+ if i.metadata.owner_references[0].kind == "StatefulSet":
+ ready = wait_for_statefulset_complete(name)
elif i.metadata.owner_references[0].kind == "ReplicaSet":
- api_response = api_instance.read_namespaced_replica_set_status(i.metadata.owner_references[0].name, namespace)
- ready = wait_for_deployment_complete(api_response.metadata.owner_references[0].name)
+ deployment_name = get_deployment_name(name)
+ ready = wait_for_deployment_complete(deployment_name)
elif i.metadata.owner_references[0].kind == "Job":
- ready = is_job_complete(i.metadata.owner_references[0].name)
+ ready = is_job_complete(name)
return ready
@@ -115,19 +121,36 @@ def is_ready(container_name):
except Exception as e:
log.error("Exception when calling list_namespaced_pod: %s\n" % e)
+
+def read_name(item):
+ return item.metadata.owner_reference[0].name
+
+
+def get_deployment_name(replicaset):
+ api_response = api_instance.read_namespaced_replica_set_status(replicaset,
+ namespace)
+ deployment_name = read_name(api_response)
+ return deployment_name
+
+
DEF_TIMEOUT = 10
DESCRIPTION = "Kubernetes container readiness check utility"
-USAGE = "Usage: ready.py [-t <timeout>] -c <container_name> [-c <container_name> ...]\n" \
+USAGE = "Usage: ready.py [-t <timeout>] -c <container_name> " \
+ "[-c <container_name> ...]\n" \
"where\n" \
- "<timeout> - wait for container readiness timeout in min, default is " + str(DEF_TIMEOUT) + "\n" \
+ "<timeout> - wait for container readiness timeout in min, " \
+ "default is " + str(DEF_TIMEOUT) + "\n" \
"<container_name> - name of the container to wait for\n"
+
def main(argv):
# args are a list of container names
container_names = []
timeout = DEF_TIMEOUT
try:
- opts, args = getopt.getopt(argv, "hc:t:", ["container-name=", "timeout=", "help"])
+ opts, args = getopt.getopt(argv, "hc:t:", ["container-name=",
+ "timeout=",
+ "help"])
for opt, arg in opts:
if opt in ("-h", "--help"):
print("%s\n\n%s" % (DESCRIPTION, USAGE))
@@ -152,12 +175,15 @@ def main(argv):
if ready is True:
break
elif time.time() > timeout:
- log.warning("timed out waiting for '" + container_name + "' to be ready")
+ log.warning("timed out waiting for '" + container_name +
+ "' to be ready")
exit(1)
else:
- # spread in time potentially parallel execution in multiple containers
+ # spread in time potentially parallel execution in multiple
+ # containers
time.sleep(random.randint(5, 11))
+
if __name__ == "__main__":
main(sys.argv[1:])