def set_environment(deployment_target): """Configure the shell environment to point to the given deployment_target using 'gcloud config set-context' and other commands. Args: deployment_target (string): value from DEPLOYMENT_TARGETS - eg. "minikube", "gcloud-dev", etc. """ settings = collections.OrderedDict() load_settings([ "deploy/kubernetes/shared-settings.yaml", "deploy/kubernetes/%(deployment_target)s-settings.yaml" % locals(), ], settings) if deployment_target.startswith("gcloud"): os.environ["KUBECONFIG"] = os.path.expanduser("~/.kube/config") run("gcloud config set core/project %(GCLOUD_PROJECT)s" % settings, print_command=True) run("gcloud config set compute/zone %(GCLOUD_ZONE)s" % settings, print_command=True) run("gcloud container clusters get-credentials --zone=%(GCLOUD_ZONE)s %(CLUSTER_NAME)s" % settings, print_command=True) elif deployment_target == "minikube": run("kubectl config use-context minikube", print_command=True) else: raise ValueError("Unexpected deployment_target value: %s" % (deployment_target, )) run("kubectl config set-context $(kubectl config current-context) --namespace=%(NAMESPACE)s" % settings)
def delete_all(deployment_target): """Runs kubectl and gcloud commands to delete the given cluster and all objects in it. Args: deployment_target (string): value from DEPLOYMENT_TARGETS - eg. "minikube", "gcloud-dev", etc. """ settings = {} load_settings([ "deploy/kubernetes/shared-settings.yaml", "deploy/kubernetes/%(deployment_target)s-settings.yaml" % locals(), ], settings) if settings.get("DEPLOY_TO_PREFIX") == "gcloud": run("gcloud container clusters delete --project %(GCLOUD_PROJECT)s --zone %(GCLOUD_ZONE)s --no-async %(CLUSTER_NAME)s" % settings, is_interactive=True) run("gcloud compute disks delete --zone %(GCLOUD_ZONE)s %(CLUSTER_NAME)s-postgres-disk" % settings, is_interactive=True) else: run('kubectl delete deployments --all') run('kubectl delete replicationcontrollers --all') run('kubectl delete services --all') run('kubectl delete StatefulSets --all') run('kubectl delete pods --all') run('docker kill $(docker ps -q)', errors_to_ignore=["requires at least 1 arg"]) run('docker rmi -f $(docker images -q)', errors_to_ignore=["requires at least 1 arg"])
def delete_all(deployment_target): """Runs kubectl and gcloud commands to delete the given cluster and all objects in it. Args: deployment_target (string): value from DEPLOYMENT_TARGETS - eg. "minikube", "gcloud-dev", etc. """ settings = {} load_settings([ "deploy/kubernetes/shared-settings.yaml", "deploy/kubernetes/%(deployment_target)s-settings.yaml" % locals(), ], settings) if settings.get("DEPLOY_TO_PREFIX") == "gcloud": run("gcloud container clusters delete --project %(GCLOUD_PROJECT)s --zone %(GCLOUD_ZONE)s --no-async %(CLUSTER_NAME)s" % settings, is_interactive=True) run("gcloud compute disks delete --zone %(GCLOUD_ZONE)s %(CLUSTER_NAME)s-postgres-disk" % settings, is_interactive=True) #run("gcloud compute disks delete --zone %(GCLOUD_ZONE)s %(CLUSTER_NAME)s-mongo-disk" % settings, is_interactive=True) #run("gcloud compute disks delete --zone %(GCLOUD_ZONE)s %(CLUSTER_NAME)s-elasticsearch-disk" % settings, is_interactive=True) else: run('kubectl delete deployments --all') run('kubectl delete replicationcontrollers --all') run('kubectl delete services --all') run('kubectl delete StatefulSets --all') run('kubectl delete pods --all') run('docker kill $(docker ps -q)', errors_to_ignore=["requires at least 1 arg"]) run('docker rmi -f $(docker images -q)', errors_to_ignore=["requires at least 1 arg"])
def prepare_settings_for_deployment(deployment_target, output_dir, runtime_settings): # parse settings files settings = collections.OrderedDict() load_settings([ "deploy/kubernetes/shared-settings.yaml", "deploy/kubernetes/%(deployment_target)s-settings.yaml" % locals(), ], settings) settings.update(runtime_settings) # make sure all keys are upper-case settings = {key.upper(): value for key, value in settings.items()} # minikube fix: set IMAGE_PULL_POLICY = "IfNotPresent" if running 'docker build' since it fails for other settings such as 'Always' # https://github.com/kubernetes/minikube/issues/1395#issuecomment-296581721 # https://kubernetes.io/docs/setup/minikube/ if settings["BUILD_DOCKER_IMAGES"] and deployment_target == "minikube": settings["IMAGE_PULL_POLICY"] = "IfNotPresent" # set docker image tag to use when pulling images (if --build-docker-images wasn't specified) or to add to new images (if it was specified) if runtime_settings.get("DOCKER_IMAGE_TAG"): settings[ "DOCKER_IMAGE_TAG"] = ":" + runtime_settings["DOCKER_IMAGE_TAG"] elif runtime_settings["BUILD_DOCKER_IMAGES"]: settings["DOCKER_IMAGE_TAG"] = ":" + settings["TIMESTAMP"] else: settings["DOCKER_IMAGE_TAG"] = ":latest" logger.info("==> Using docker image tag: %(DOCKER_IMAGE_TAG)s" % settings) # configure deployment dir settings["DEPLOYMENT_TEMP_DIR"] = os.path.join( settings["DEPLOYMENT_TEMP_DIR"], "deployments/%(TIMESTAMP)s_%(DEPLOY_TO)s" % settings) logger.info("==> Settings:\n%s" % pformat(settings)) # re-configure logging output to write to log log_dir = os.path.join(settings["DEPLOYMENT_TEMP_DIR"], "logs") if not os.path.isdir(log_dir): os.makedirs(log_dir) log_file_path = os.path.join(log_dir, "deploy.log") sh = logging.StreamHandler(open(log_file_path, "w")) sh.setLevel(logging.INFO) logger.addHandler(sh) logger.info("Starting log file: %(log_file_path)s" % locals()) # process Jinja templates to replace template variables with values from settings. Write results to temp output directory. input_base_dir = settings["BASE_DIR"] output_base_dir = settings["DEPLOYMENT_TEMP_DIR"] template_file_paths = glob.glob("deploy/kubernetes/*.yaml") + \ glob.glob("deploy/kubernetes/*/*.yaml") + \ glob.glob("hail_elasticsearch_pipelines/kubernetes/elasticsearch-sharded/*.yaml") for file_path in template_file_paths: process_jinja_template(input_base_dir, file_path, settings, output_base_dir) return settings
def prepare_settings_for_deployment(deployment_target, output_dir, runtime_settings): # parse settings files settings = collections.OrderedDict() load_settings([ "deploy/kubernetes/shared-settings.yaml", "deploy/kubernetes/%(deployment_target)s-settings.yaml" % locals(), ], settings) settings.update(runtime_settings) # make sure all keys are upper-case settings = {key.upper(): value for key, value in settings.items()} # minikube fix: set IMAGE_PULL_POLICY = "IfNotPresent" if running 'docker build' since it fails for other settings such as 'Always' # https://github.com/kubernetes/minikube/issues/1395#issuecomment-296581721 # https://kubernetes.io/docs/setup/minikube/ if settings["BUILD_DOCKER_IMAGES"] and deployment_target == "minikube": settings["IMAGE_PULL_POLICY"] = "IfNotPresent" # set docker image tag to use when pulling images (if --build-docker-images wasn't specified) or to add to new images (if it was specified) if runtime_settings.get("DOCKER_IMAGE_TAG"): settings["DOCKER_IMAGE_TAG"] = ":" + runtime_settings["DOCKER_IMAGE_TAG"] elif runtime_settings["BUILD_DOCKER_IMAGES"]: settings["DOCKER_IMAGE_TAG"] = ":" + settings["TIMESTAMP"] else: settings["DOCKER_IMAGE_TAG"] = ":latest" logger.info("==> Using docker image tag: %(DOCKER_IMAGE_TAG)s" % settings) # configure deployment dir settings["DEPLOYMENT_TEMP_DIR"] = os.path.join( settings["DEPLOYMENT_TEMP_DIR"], "deployments/%(TIMESTAMP)s_%(DEPLOY_TO)s" % settings) logger.info("==> Settings:\n%s" % pformat(settings)) # re-configure logging output to write to log log_dir = os.path.join(settings["DEPLOYMENT_TEMP_DIR"], "logs") if not os.path.isdir(log_dir): os.makedirs(log_dir) log_file_path = os.path.join(log_dir, "deploy.log") sh = logging.StreamHandler(open(log_file_path, "w")) sh.setLevel(logging.INFO) logger.addHandler(sh) logger.info("Starting log file: %(log_file_path)s" % locals()) # process Jinja templates to replace template variables with values from settings. Write results to temp output directory. input_base_dir = settings["BASE_DIR"] output_base_dir = settings["DEPLOYMENT_TEMP_DIR"] template_file_paths = glob.glob("deploy/kubernetes/*.yaml") + \ glob.glob("deploy/kubernetes/*/*.yaml") + \ glob.glob("hail_elasticsearch_pipelines/kubernetes/elasticsearch-sharded/*.yaml") for file_path in template_file_paths: process_jinja_template(input_base_dir, file_path, settings, output_base_dir) return settings
def prepare_settings_for_deployment(deployment_target, output_dir, runtime_settings): # parse settings files settings = collections.OrderedDict() load_settings([ "deploy/kubernetes/shared-settings.yaml", "deploy/kubernetes/%(deployment_target)s-settings.yaml" % locals(), ], settings) settings.update(runtime_settings) # make sure all keys are upper-case settings = {key.upper(): value for key, value in settings.items()} # configure deployment dir settings["DEPLOYMENT_TEMP_DIR"] = os.path.join( settings["DEPLOYMENT_TEMP_DIR"], "deployments/%(TIMESTAMP)s_%(DEPLOY_TO)s" % settings) logger.info("==> Settings:\n%s" % pformat(settings)) # re-configure logging output to write to log log_dir = os.path.join(settings["DEPLOYMENT_TEMP_DIR"], "logs") if not os.path.isdir(log_dir): os.makedirs(log_dir) log_file_path = os.path.join(log_dir, "deploy.log") sh = logging.StreamHandler(open(log_file_path, "w")) sh.setLevel(logging.INFO) logger.addHandler(sh) logger.info("Starting log file: %(log_file_path)s" % locals()) # process Jinja templates to replace template variables with values from settings. Write results to temp output directory. input_base_dir = settings["BASE_DIR"] output_base_dir = settings["DEPLOYMENT_TEMP_DIR"] template_file_paths = glob.glob("deploy/kubernetes/*.yaml") + \ glob.glob("deploy/kubernetes/*/*.yaml") + \ glob.glob("hail_elasticsearch_pipelines/kubernetes/elasticsearch-sharded/*.yaml") for file_path in template_file_paths: process_jinja_template(input_base_dir, file_path, settings, output_base_dir) return settings
def set_environment(deployment_target): """Configure the shell environment to point to the given deployment_target using 'gcloud config set-context' and other commands. Args: deployment_target (string): value from DEPLOYMENT_TARGETS - eg. "minikube", "gcloud-dev", etc. """ settings = collections.OrderedDict() load_settings([ "deploy/kubernetes/shared-settings.yaml", "deploy/kubernetes/%(deployment_target)s-settings.yaml" % locals(), ], settings) if deployment_target.startswith("gcloud"): os.environ["KUBECONFIG"] = os.path.expanduser("~/.kube/config") run("gcloud config set core/project %(GCLOUD_PROJECT)s" % settings, print_command=True) run("gcloud config set compute/zone %(GCLOUD_ZONE)s" % settings, print_command=True) run("gcloud container clusters get-credentials --zone=%(GCLOUD_ZONE)s %(CLUSTER_NAME)s" % settings, print_command=True) elif deployment_target == "minikube": run("kubectl config use-context minikube", print_command=True) else: raise ValueError("Unexpected deployment_target value: %s" % (deployment_target,)) run("kubectl config set-context $(kubectl config current-context) --namespace=%(NAMESPACE)s" % settings)