in mysqloperator/sidecar_main.py [0:0]
def main(argv):
global g_cluster_name
global g_pod_index
global g_pod_name
global g_pod_namespace
# const - when there is an argument without value
# default - when there is no argument at all
# nargs = "?" - zero or one arguments
# nargs = "+" - one or more arguments, returns a list()
# nargs = 8 - 8 arguments will be consumed
# nargs = 1 - 1 argument will be consumed, returns a list with one element
parser = argparse.ArgumentParser(description = "MySQL InnoDB Cluster Instance Sidecar Container")
parser.add_argument('--debug', type = int, nargs="?", const = 1, default = 0, help = "Debug")
parser.add_argument('--logging-level', type = int, nargs="?", default = logging.INFO, help = "Logging Level")
parser.add_argument('--pod-name', type = str, default = "", help = "Pod Name")
parser.add_argument('--pod-namespace', type = str, default = "", help = "Pod Namespace")
parser.add_argument('--datadir', type = str, nargs=1, help = "Path do data directory")
args = parser.parse_args(argv)
datadir = args.datadir
kopf.configure(verbose=True if args.debug != 0 else False)
mysqlsh.globals.shell.options.useWizards = False
logging.basicConfig(level=args.logging_level,
format='%(asctime)s - [%(levelname)s] [%(name)s] %(message)s',
datefmt="%Y-%m-%dT%H:%M:%S")
logger = logging.getLogger("sidecar")
utils.log_banner(__file__, logger)
g_pod_namespace = args.pod_namespace
g_pod_name = args.pod_name
name = args.pod_name
namespace = args.pod_namespace
pod = MySQLPod.read(name, namespace)
logger.info(f"My pod is {name} in {namespace}")
logger.info("Bootstrapping")
r = bootstrap(pod, datadir, logger)
if r < 0:
logger.info(f"Bootstrap error {r}")
return abs(r)
cluster = pod.get_cluster()
cluster.log_tls_info(logger)
g_cluster_name = cluster.name
g_pod_index = pod.index
if r == 0:
# refresh TLS settings if we're restarting in case something changed
reconfigure_tls(pod, False if cluster.parsed_spec.tlsUseSelfSigned else True, "main", logger)
logger.info("Starting Operator request handler...")
try:
loop = asyncio.get_event_loop()
loop.run_until_complete(kopf.operator(namespace=namespace))
except Exception as e:
import traceback
traceback.print_exc()
logger.critical(f"Unhandled exception while bootstrapping MySQL: {e}")
# TODO post event to the Pod and the Cluster object if this is the seed
return 1