diff --git a/examples/source-to-image/templates.json b/examples/source-to-image/templates.json index a923450c..af5127e7 100644 --- a/examples/source-to-image/templates.json +++ b/examples/source-to-image/templates.json @@ -1,266 +1,375 @@ { - "kind": "Template", + "kind": "List", "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" - } - }, + "items": [ { - "kind": "DeploymentConfig", + "kind": "Template", "apiVersion": "v1", "metadata": { - "name": "${APPLICATION_NAME}", - "labels": { - "app": "${APPLICATION_NAME}" + "name": "jupyter-notebook-builder", + "annotations": { + "openshift.io/display-name": "Jupyter Notebook Builder", + "description": "Template for building Jupyter Notebook images with bundled notebooks and files.", + "iconClass": "icon-python", + "tags": "python,jupyter" } }, - "spec": { - "strategy": { - "type": "Recreate" + "parameters": [ + { + "name": "IMAGE_NAME", + "value": "notebook", + "required": true }, - "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}" + { + "name": "BUILDER_IMAGE", + "value": "jupyter/minimal-notebook:latest", + "required": true }, - "template": { + { + "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 + } + ], + "objects": [ + { + "apiVersion": "v1", + "kind": "ImageStream", "metadata": { - "annotations": { - "alpha.image.policy.openshift.io/resolve-names": "*" - }, + "name": "${IMAGE_NAME}", "labels": { - "app": "${APPLICATION_NAME}", - "deploymentconfig": "${APPLICATION_NAME}" + "app": "${IMAGE_NAME}" + } + } + }, + { + "apiVersion": "v1", + "kind": "BuildConfig", + "metadata": { + "name": "${IMAGE_NAME}", + "labels": { + "app": "${IMAGE_NAME}" } }, "spec": { - "containers": [ + "output": { + "to": { + "kind": "ImageStreamTag", + "name": "${IMAGE_NAME}:latest" + } + }, + "resources": { + "limits": { + "memory": "1Gi" + } + }, + "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": [ { - "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" + "type": "ConfigChange" + } + ] + } + } + ] + }, + { + "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}" + } + } + }, + { + "apiVersion": "v1", + "kind": "BuildConfig", + "metadata": { + "name": "${APPLICATION_NAME}", + "labels": { + "app": "${APPLICATION_NAME}" + } + }, + "spec": { + "output": { + "to": { + "kind": "ImageStreamTag", + "name": "${APPLICATION_NAME}:latest" + } + }, + "resources": { + "limits": { + "memory": "1Gi" + } + }, + "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" } - ], - "env": [ - { - "name": "JUPYTER_NOTEBOOK_PASSWORD", - "value": "${NOTEBOOK_PASSWORD}" - } - ], - "volumeMounts": [ - { - "mountPath": "/home/jovyan/configs", - "name": "configs" - } - ] + } } ], - "securityContext": { - "supplementalGroups": [ - 100 - ] + "replicas": 1, + "selector": { + "app": "${APPLICATION_NAME}", + "deploymentconfig": "${APPLICATION_NAME}" }, - "volumes": [ - { - "configMap": { - "name": "${APPLICATION_NAME}-cfg" - }, - "name": "configs" - } - ] + "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": "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", - "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 + "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" } - ], - "selector": { - "app": "${APPLICATION_NAME}", - "deploymentconfig": "${APPLICATION_NAME}" - }, - "type": "ClusterIP" - } + } + ] } ] }