Commit 52fba596 authored by Graham Dumpleton's avatar Graham Dumpleton

Add OpenShift template for building, but not deploying an image using Source-to-Image builder.

parent f87dec59
{ {
"kind": "Template", "kind": "List",
"apiVersion": "v1", "apiVersion": "v1",
"metadata": { "items": [
"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", "kind": "Template",
"apiVersion": "v1", "apiVersion": "v1",
"metadata": { "metadata": {
"name": "${APPLICATION_NAME}", "name": "jupyter-notebook-builder",
"labels": { "annotations": {
"app": "${APPLICATION_NAME}" "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": { "parameters": [
"strategy": { {
"type": "Recreate" "name": "IMAGE_NAME",
"value": "notebook",
"required": true
}, },
"triggers": [ {
{ "name": "BUILDER_IMAGE",
"type": "ConfigChange" "value": "jupyter/minimal-notebook:latest",
}, "required": true
{ },
"type": "ImageChange", {
"imageChangeParams": { "name": "BUILDER_SCRIPTS",
"automatic": true, "value": "https://raw.githubusercontent.com/jupyter/docker-stacks/source-to-image/examples/source-to-image",
"containerNames": [ "required": true
"jupyter-notebook" },
], {
"from": { "name": "GIT_REPOSITORY_URL",
"kind": "ImageStreamTag", "value": "",
"name": "${APPLICATION_NAME}:latest" "required": true
} },
} {
"name": "GIT_REFERENCE",
"value": "master",
"required": true
},
{
"name": "CONTEXT_DIR",
"value": "",
"required": false
}
],
"objects": [
{
"apiVersion": "v1",
"kind": "ImageStream",
"metadata": {
"name": "${IMAGE_NAME}",
"labels": {
"app": "${IMAGE_NAME}"
}
} }
],
"replicas": 1,
"selector": {
"app": "${APPLICATION_NAME}",
"deploymentconfig": "${APPLICATION_NAME}"
}, },
"template": { {
"apiVersion": "v1",
"kind": "BuildConfig",
"metadata": { "metadata": {
"annotations": { "name": "${IMAGE_NAME}",
"alpha.image.policy.openshift.io/resolve-names": "*"
},
"labels": { "labels": {
"app": "${APPLICATION_NAME}", "app": "${IMAGE_NAME}"
"deploymentconfig": "${APPLICATION_NAME}"
} }
}, },
"spec": { "spec": {
"containers": [ "output": {
{ "to": {
"name": "jupyter-notebook", "kind": "ImageStreamTag",
"image": "${APPLICATION_NAME}:latest", "name": "${IMAGE_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": [ "resources": {
{ "limits": {
"configMap": { "memory": "1Gi"
"name": "${APPLICATION_NAME}-cfg"
},
"name": "configs"
} }
] },
"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": "Route", "kind": "Template",
"apiVersion": "v1", "apiVersion": "v1",
"metadata": { "metadata": {
"name": "${APPLICATION_NAME}", "name": "jupyter-notebook-quickstart",
"labels": { "annotations": {
"app": "${APPLICATION_NAME}" "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"
} }
}, },
"spec": { "parameters": [
"host": "", {
"to": { "name": "APPLICATION_NAME",
"kind": "Service", "value": "notebook",
"name": "${APPLICATION_NAME}", "required": true
"weight": 100
}, },
"port": { {
"targetPort": "8888-tcp" "name": "BUILDER_IMAGE",
"value": "jupyter/minimal-notebook:latest",
"required": true
}, },
"tls": { {
"termination": "edge", "name": "BUILDER_SCRIPTS",
"insecureEdgeTerminationPolicy": "Redirect" "value": "https://raw.githubusercontent.com/jupyter/docker-stacks/source-to-image/examples/source-to-image",
} "required": true
} },
}, {
{ "name": "GIT_REPOSITORY_URL",
"kind": "Service", "value": "",
"apiVersion": "v1", "required": true
"metadata": { },
"name": "${APPLICATION_NAME}", {
"labels": { "name": "GIT_REFERENCE",
"app": "${APPLICATION_NAME}" "value": "master",
"required": true
},
{
"name": "CONTEXT_DIR",
"value": "",
"required": false
},
{
"name": "NOTEBOOK_PASSWORD",
"from": "[a-f0-9]{32}",
"generate": "expression"
} }
}, ],
"spec": { "objects": [
"ports": [ {
{ "apiVersion": "v1",
"name": "8888-tcp", "kind": "ImageStream",
"protocol": "TCP", "metadata": {
"port": 8888, "name": "${APPLICATION_NAME}",
"targetPort": 8888 "labels": {
"app": "${APPLICATION_NAME}"
}
} }
],
"selector": {
"app": "${APPLICATION_NAME}",
"deploymentconfig": "${APPLICATION_NAME}"
}, },
"type": "ClusterIP" {
} "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"
}
}
}
],
"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"
}
}
]
} }
] ]
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment