Implement new taggers; add all the images; simplify code

This commit is contained in:
Ayaz Salikhov
2021-03-22 13:28:49 +03:00
parent aa2b3645e2
commit 0833514be2
3 changed files with 82 additions and 40 deletions

View File

@@ -3,11 +3,14 @@
# Distributed under the terms of the Modified BSD License. # Distributed under the terms of the Modified BSD License.
import argparse import argparse
import logging import logging
from tagger_interface import TaggerInterface
from dataclasses import dataclass, field from dataclasses import dataclass, field
from typing import Optional, List from typing import Optional, List
from taggers import SHATagger, \ from taggers import TaggerInterface, \
PythonVersionTagger, JupyterNotebookVersionTagger, JupyterLabVersionTagger, JupyterHubVersionTagger SHATagger, \
PythonVersionTagger, \
JupyterNotebookVersionTagger, JupyterLabVersionTagger, JupyterHubVersionTagger, \
RVersionTagger, TensorflowVersionTagger, JuliaVersionTagger, \
SparkVersionTagger, HadoopVersionTagger, JavaVersionTagger
from plumbum.cmd import docker from plumbum.cmd import docker
@@ -29,8 +32,30 @@ ALL_IMAGES = {
] ]
), ),
"minimal-notebook": ImageDescription( "minimal-notebook": ImageDescription(
parent_image="base-notebook", parent_image="base-notebook"
taggers=[] ),
"scipy-notebook": ImageDescription(
parent_image="minimal-notebook"
),
"r-notebook": ImageDescription(
parent_image="minimal-notebook",
taggers=[RVersionTagger]
),
"tensorflow-notebook": ImageDescription(
parent_image="scipy-notebook",
taggers=[TensorflowVersionTagger]
),
"datascience-notebook": ImageDescription(
parent_image="scipy-notebook",
taggers=[JuliaVersionTagger]
),
"pyspark-notebook": ImageDescription(
parent_image="scipy-notebook",
taggers=[SparkVersionTagger, HadoopVersionTagger, JavaVersionTagger]
),
"allspark-notebook": ImageDescription(
parent_image="pyspark-notebook",
taggers=[RVersionTagger]
) )
} }
@@ -49,15 +74,23 @@ def apply_tags(short_image_name, owner):
taggers = get_all_taggers(short_image_name) taggers = get_all_taggers(short_image_name)
for tagger in taggers: for tagger in taggers:
tag_name, tag_value = tagger.tag_name(), tagger.tag_value(short_image_name, owner) tagger_name = tagger.__name__
logger.info(f"Applying tag tag_name: {tag_name} tag_value: {tag_value}") tag_value = tagger.tag_value(short_image_name, owner)
logger.info(f"Applying tag tagger_name: {tagger_name} tag_value: {tag_value}")
docker["tag", f"{owner}/{short_image_name}:latest", f"{owner}/{short_image_name}:{tag_value}"]() docker["tag", f"{owner}/{short_image_name}:latest", f"{owner}/{short_image_name}:{tag_value}"]()
if __name__ == "__main__": if __name__ == "__main__":
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
arg_parser = argparse.ArgumentParser() arg_parser = argparse.ArgumentParser()
arg_parser.add_argument("--short-image-name", required=True, help="Short image name to apply tags for") arg_parser.add_argument("--short-image-name", required=True, help="Short image name to apply tags for")
arg_parser.add_argument("--owner", required=True, help="Owner of the image") arg_parser.add_argument("--owner", required=True, help="Owner of the image")
args = arg_parser.parse_args() args = arg_parser.parse_args()
apply_tags(args.short_image_name, args.owner)
short_image_name = args.short_image_name
owner = args.owner
assert short_image_name in ALL_IMAGES, f"Did not found {short_image_name} image description"
apply_tags(short_image_name, owner)

View File

@@ -1,13 +0,0 @@
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
class TaggerInterface:
"""HooksInterface for all hooks common interface"""
@staticmethod
def tag_value(image):
raise NotImplementedError
@staticmethod
def tag_name():
raise NotImplementedError

View File

@@ -1,7 +1,6 @@
# Copyright (c) Jupyter Development Team. # Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License. # Distributed under the terms of the Modified BSD License.
import logging import logging
from tagger_interface import TaggerInterface
from git_helper import GitHelper from git_helper import GitHelper
from docker_runner import DockerRunner from docker_runner import DockerRunner
@@ -18,51 +17,74 @@ def _get_program_version(short_image_name, owner, program):
return cont.exec_run(cmd).output.decode("utf-8").strip() return cont.exec_run(cmd).output.decode("utf-8").strip()
class TaggerInterface:
"""HooksInterface for all hooks common interface"""
@staticmethod
def tag_value(image):
raise NotImplementedError
class SHATagger(TaggerInterface): class SHATagger(TaggerInterface):
@staticmethod @staticmethod
def tag_value(short_image_name, owner): def tag_value(short_image_name, owner):
return GitHelper.commit_hash()[:12] return GitHelper.commit_hash()[:12]
@staticmethod
def tag_name():
return "git_sha"
class PythonVersionTagger(TaggerInterface): class PythonVersionTagger(TaggerInterface):
@staticmethod @staticmethod
def tag_value(short_image_name, owner): def tag_value(short_image_name, owner):
return "python-" + _get_program_version(short_image_name, owner, "python").split()[1] return "python-" + _get_program_version(short_image_name, owner, "python").split()[1]
@staticmethod
def tag_name():
return "python_version"
class JupyterNotebookVersionTagger(TaggerInterface): class JupyterNotebookVersionTagger(TaggerInterface):
@staticmethod @staticmethod
def tag_value(short_image_name, owner): def tag_value(short_image_name, owner):
return "notebook-" + _get_program_version(short_image_name, owner, "jupyter-notebook") return "notebook-" + _get_program_version(short_image_name, owner, "jupyter-notebook")
@staticmethod
def tag_name():
return "jupyter_notebook_version"
class JupyterLabVersionTagger(TaggerInterface): class JupyterLabVersionTagger(TaggerInterface):
@staticmethod @staticmethod
def tag_value(short_image_name, owner): def tag_value(short_image_name, owner):
return "lab-" + _get_program_version(short_image_name, owner, "jupyter-lab") return "lab-" + _get_program_version(short_image_name, owner, "jupyter-lab")
@staticmethod
def tag_name():
return "jupyter_lab_version"
class JupyterHubVersionTagger(TaggerInterface): class JupyterHubVersionTagger(TaggerInterface):
@staticmethod @staticmethod
def tag_value(short_image_name, owner): def tag_value(short_image_name, owner):
return "hub-" + _get_program_version(short_image_name, owner, "jupyterhub") return "hub-" + _get_program_version(short_image_name, owner, "jupyterhub")
class RVersionTagger(TaggerInterface):
@staticmethod @staticmethod
def tag_name(): def tag_value(short_image_name, owner):
return "jupyter_lab_version" return "r-" + _get_program_version(short_image_name, owner, "R")
class TensorflowVersionTagger(TaggerInterface):
@staticmethod
def tag_value(short_image_name, owner):
return "tensorflow-" + _get_program_version(short_image_name, owner, "tensorflow")
class JuliaVersionTagger(TaggerInterface):
@staticmethod
def tag_value(short_image_name, owner):
return "julia-" + _get_program_version(short_image_name, owner, "julia")
class SparkVersionTagger(TaggerInterface):
@staticmethod
def tag_value(short_image_name, owner):
return "spark-" + _get_program_version(short_image_name, owner, "spark")
class HadoopVersionTagger(TaggerInterface):
@staticmethod
def tag_value(short_image_name, owner):
return "hadoop-" + _get_program_version(short_image_name, owner, "hadoop")
class JavaVersionTagger(TaggerInterface):
@staticmethod
def tag_value(short_image_name, owner):
return "java-" + _get_program_version(short_image_name, owner, "java")