diff --git a/examples/source-to-image/templates.json b/examples/source-to-image/templates.json new file mode 100644 index 00000000..a923450c --- /dev/null +++ b/examples/source-to-image/templates.json @@ -0,0 +1,266 @@ +{ + "kind": "Template", + "apiVersion": "v1", + "metadata": { + "name": "jupyter-notebook-quickstart", + "annotations": { + "openshift.io/display-name": "Jupyter Notebook Quickstart", + "description": "Template for deploying Jupyter Notebook images with bundled notebooks and files.", + "iconClass": "icon-python", + "tags": "python,jupyter" + } + }, + "parameters": [ + { + "name": "APPLICATION_NAME", + "value": "notebook", + "required": true + }, + { + "name": "BUILDER_IMAGE", + "value": "jupyter/minimal-notebook:latest", + "required": true + }, + { + "name": "BUILDER_SCRIPTS", + "value": "https://raw.githubusercontent.com/jupyter/docker-stacks/source-to-image/examples/source-to-image", + "required": true + }, + { + "name": "GIT_REPOSITORY_URL", + "value": "", + "required": true + }, + { + "name": "GIT_REFERENCE", + "value": "master", + "required": true + }, + { + "name": "CONTEXT_DIR", + "value": "", + "required": false + }, + { + "name": "NOTEBOOK_PASSWORD", + "from": "[a-f0-9]{32}", + "generate": "expression" + } + ], + "objects": [ + { + "apiVersion": "v1", + "kind": "ImageStream", + "metadata": { + "name": "${APPLICATION_NAME}", + "labels": { + "app": "${APPLICATION_NAME}" + } + }, + "spec": { + "lookupPolicy": { + "local": false + } + } + }, + { + "apiVersion": "v1", + "kind": "BuildConfig", + "metadata": { + "name": "${APPLICATION_NAME}", + "labels": { + "app": "${APPLICATION_NAME}" + } + }, + "spec": { + "output": { + "to": { + "kind": "ImageStreamTag", + "name": "${APPLICATION_NAME}:latest" + } + }, + "source": { + "type": "Git", + "git": { + "uri": "${GIT_REPOSITORY_URL}", + "ref": "${GIT_REFERENCE}" + }, + "contextDir": "${CONTEXT_DIR}" + }, + "strategy": { + "type": "Source", + "sourceStrategy": { + "from": { + "kind": "DockerImage", + "name": "${BUILDER_IMAGE}" + }, + "scripts": "${BUILDER_SCRIPTS}" + } + }, + "triggers": [ + { + "type": "ConfigChange" + } + ] + } + }, + { + "kind": "ConfigMap", + "apiVersion": "v1", + "metadata": { + "name": "${APPLICATION_NAME}-cfg", + "labels": { + "app": "${APPLICATION_NAME}" + } + }, + "data": { + "jupyter_notebook_config.py": "import os\n\npassword = os.environ.get('JUPYTER_NOTEBOOK_PASSWORD')\n\nif password:\n import notebook.auth\n c.NotebookApp.password = notebook.auth.passwd(password)\n del password\n del os.environ['JUPYTER_NOTEBOOK_PASSWORD']\n\nimage_config_file = '/home/jovyan/work/.jupyter/jupyter_notebook_config.py'\n\nif os.path.exists(image_config_file):\n with open(image_config_file) as fp:\n exec(compile(fp.read(), image_config_file, 'exec'), globals())\n" + } + }, + { + "kind": "DeploymentConfig", + "apiVersion": "v1", + "metadata": { + "name": "${APPLICATION_NAME}", + "labels": { + "app": "${APPLICATION_NAME}" + } + }, + "spec": { + "strategy": { + "type": "Recreate" + }, + "triggers": [ + { + "type": "ConfigChange" + }, + { + "type": "ImageChange", + "imageChangeParams": { + "automatic": true, + "containerNames": [ + "jupyter-notebook" + ], + "from": { + "kind": "ImageStreamTag", + "name": "${APPLICATION_NAME}:latest" + } + } + } + ], + "replicas": 1, + "selector": { + "app": "${APPLICATION_NAME}", + "deploymentconfig": "${APPLICATION_NAME}" + }, + "template": { + "metadata": { + "annotations": { + "alpha.image.policy.openshift.io/resolve-names": "*" + }, + "labels": { + "app": "${APPLICATION_NAME}", + "deploymentconfig": "${APPLICATION_NAME}" + } + }, + "spec": { + "containers": [ + { + "name": "jupyter-notebook", + "image": "${APPLICATION_NAME}:latest", + "command": [ + "start-notebook.sh", + "--config=/home/jovyan/configs/jupyter_notebook_config.py", + "--no-browser", + "--ip=0.0.0.0" + ], + + "ports": [ + { + "containerPort": 8888, + "protocol": "TCP" + } + ], + "env": [ + { + "name": "JUPYTER_NOTEBOOK_PASSWORD", + "value": "${NOTEBOOK_PASSWORD}" + } + ], + "volumeMounts": [ + { + "mountPath": "/home/jovyan/configs", + "name": "configs" + } + ] + } + ], + "securityContext": { + "supplementalGroups": [ + 100 + ] + }, + "volumes": [ + { + "configMap": { + "name": "${APPLICATION_NAME}-cfg" + }, + "name": "configs" + } + ] + } + } + } + }, + { + "kind": "Route", + "apiVersion": "v1", + "metadata": { + "name": "${APPLICATION_NAME}", + "labels": { + "app": "${APPLICATION_NAME}" + } + }, + "spec": { + "host": "", + "to": { + "kind": "Service", + "name": "${APPLICATION_NAME}", + "weight": 100 + }, + "port": { + "targetPort": "8888-tcp" + }, + "tls": { + "termination": "edge", + "insecureEdgeTerminationPolicy": "Redirect" + } + } + }, + { + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "${APPLICATION_NAME}", + "labels": { + "app": "${APPLICATION_NAME}" + } + }, + "spec": { + "ports": [ + { + "name": "8888-tcp", + "protocol": "TCP", + "port": 8888, + "targetPort": 8888 + } + ], + "selector": { + "app": "${APPLICATION_NAME}", + "deploymentconfig": "${APPLICATION_NAME}" + }, + "type": "ClusterIP" + } + } + ] +}