Source code for narrenschiff.modules.wait_for_pod

# Copyright 2021 The Narrenschiff Authors

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

#     http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import re
import time
import subprocess

import click

from narrenschiff.modules.common import NarrenschiffModule
from narrenschiff.modules.common import NarrenschiffModuleException


[docs]class WaitForPod(NarrenschiffModule): """Use this module when you need to wait for a pod to become ready."""
[docs] def execute(self): timeout = 300 # 5min pod_name = self.command['grep_pod_name'] start_time = time.time() while True: process = subprocess.run( self.cmd, shell=True, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) output = process.stdout.decode('utf-8') # output, rc = self.subprocess(cmd) # if rc: -> sys.exit (something went wrong) print(output) r = re.search(r'^{}.*\s+(\d)/\d.*'.format(pod_name), output, re.M) if int(r.group(1)) == self.command['threshold_replicas']: click.secho('Pod ready', fg='green') # self.echo('Pod ready', rc) break if time.time() - start_time >= timeout: raise NarrenschiffModuleException('Timeout exceeded') # click.secho('Waiting...', fg='green') time.sleep(1)
@property def cmd(self): namespace = self.command['namespace'] return 'kubectl get pods --namespace {}'.format(namespace)
[docs] def dry_run_supported(self, cmd): return False