{
	"kind": "Template",
	"apiVersion": "v1",
	"metadata": {
		"name": "jenkins-persistent",
		"creationTimestamp": null,
		"annotations": {
			"description": "Jenkins service, with persistent storage.\n\nNOTE: You must have persistent volumes available in your cluster to use this template.",
			"iconClass": "icon-jenkins",
			"openshift.io/display-name": "Jenkins",
			"openshift.io/documentation-url": "https://docs.okd.io/latest/using_images/other_images/jenkins.html",
			"openshift.io/long-description": "This template deploys a Jenkins server capable of managing OpenShift Pipeline builds and supporting OpenShift-based oauth login.",
			"openshift.io/provider-display-name": "Red Hat, Inc.",
			"openshift.io/support-url": "https://access.redhat.com",
			"tags": "instant-app,jenkins"
		}
	},
	"message": "A Jenkins service has been created in your project.  Log into Jenkins with your OpenShift account.  The tutorial at https://github.com/openshift/origin/blob/master/examples/jenkins/README.md contains more information about using this template.",
	"objects": [
		{
			"apiVersion": "v1",
			"kind": "Route",
			"metadata": {
				"annotations": {
					"haproxy.router.openshift.io/timeout": "4m",
					"template.openshift.io/expose-uri": "http://{.spec.host}{.spec.path}"
				},
				"name": "${JENKINS_SERVICE_NAME}"
			},
			"spec": {
				"tls": {
					"insecureEdgeTerminationPolicy": "Redirect",
					"termination": "edge"
				},
				"to": {
					"kind": "Service",
					"name": "${JENKINS_SERVICE_NAME}"
				}
			}
		},
		{
			"apiVersion": "v1",
			"kind": "ConfigMap",
			"metadata": {
				"labels": {
					"config.openshift.io/inject-trusted-cabundle": "true"
				},
				"name": "${JENKINS_SERVICE_NAME}-trusted-ca-bundle"
			}
		},
		{
			"apiVersion": "v1",
			"kind": "PersistentVolumeClaim",
			"metadata": {
				"name": "${JENKINS_SERVICE_NAME}"
			},
			"spec": {
				"accessModes": [
					"ReadWriteOnce"
				],
				"resources": {
					"requests": {
						"storage": "${VOLUME_CAPACITY}"
					}
				}
			}
		},
		{
			"apiVersion": "v1",
			"kind": "DeploymentConfig",
			"metadata": {
				"annotations": {
					"template.alpha.openshift.io/wait-for-ready": "true"
				},
				"name": "${JENKINS_SERVICE_NAME}"
			},
			"spec": {
				"replicas": 1,
				"selector": {
					"name": "${JENKINS_SERVICE_NAME}"
				},
				"strategy": {
					"type": "Recreate"
				},
				"template": {
					"metadata": {
						"labels": {
							"name": "${JENKINS_SERVICE_NAME}"
						}
					},
					"spec": {
						"containers": [
							{
								"capabilities": {},
								"env": [
									{
										"name": "OPENSHIFT_ENABLE_OAUTH",
										"value": "${ENABLE_OAUTH}"
									},
									{
										"name": "OPENSHIFT_ENABLE_REDIRECT_PROMPT",
										"value": "true"
									},
									{
										"name": "DISABLE_ADMINISTRATIVE_MONITORS",
										"value": "${DISABLE_ADMINISTRATIVE_MONITORS}"
									},
									{
										"name": "KUBERNETES_MASTER",
										"value": "https://kubernetes.default:443"
									},
									{
										"name": "KUBERNETES_TRUST_CERTIFICATES",
										"value": "true"
									},
									{
										"name": "JENKINS_SERVICE_NAME",
										"value": "${JENKINS_SERVICE_NAME}"
									},
									{
										"name": "JNLP_SERVICE_NAME",
										"value": "${JNLP_SERVICE_NAME}"
									},
									{
										"name": "ENABLE_FATAL_ERROR_LOG_FILE",
										"value": "${ENABLE_FATAL_ERROR_LOG_FILE}"
									},
									{
										"name": "JENKINS_UC_INSECURE",
										"value": "${JENKINS_UC_INSECURE}"
									},
									{
										"name": "CASC_JENKINS_CONFIG",
										"value": "/var/lib/jenkins/proxy.yaml"
									}
								],
								"image": " ",
								"imagePullPolicy": "IfNotPresent",
								"livenessProbe": {
									"failureThreshold": 2,
									"httpGet": {
										"path": "/login",
										"port": 8080
									},
									"initialDelaySeconds": 420,
									"periodSeconds": 360,
									"timeoutSeconds": 240
								},
								"name": "jenkins",
								"readinessProbe": {
									"httpGet": {
										"path": "/login",
										"port": 8080
									},
									"initialDelaySeconds": 3,
									"timeoutSeconds": 240
								},
								"resources": {
									"limits": {
										"memory": "${MEMORY_LIMIT}"
									}
								},
								"securityContext": {
									"capabilities": {},
									"privileged": false
								},
								"terminationMessagePath": "/dev/termination-log",
								"volumeMounts": [
									{
										"mountPath": "/var/lib/jenkins",
										"name": "${JENKINS_SERVICE_NAME}-data"
									},
									{
										"mountPath": "/etc/pki/ca-trust/source/anchors",
										"name": "${JENKINS_SERVICE_NAME}-trusted-ca-bundle"
									}
								]
							}
						],
						"dnsPolicy": "ClusterFirst",
						"restartPolicy": "Always",
						"serviceAccountName": "${JENKINS_SERVICE_NAME}",
						"volumes": [
							{
								"name": "${JENKINS_SERVICE_NAME}-data",
								"persistentVolumeClaim": {
									"claimName": "${JENKINS_SERVICE_NAME}"
								}
							},
							{
								"configMap": {
									"name": "${JENKINS_SERVICE_NAME}-trusted-ca-bundle",
									"optional": true
								},
								"name": "${JENKINS_SERVICE_NAME}-trusted-ca-bundle"
							}
						]
					}
				},
				"triggers": [
					{
						"imageChangeParams": {
							"automatic": true,
							"containerNames": [
								"jenkins"
							],
							"from": {
								"kind": "ImageStreamTag",
								"name": "${JENKINS_IMAGE_STREAM_TAG}",
								"namespace": "${NAMESPACE}"
							},
							"lastTriggeredImage": ""
						},
						"type": "ImageChange"
					},
					{
						"type": "ConfigChange"
					}
				]
			}
		},
		{
			"apiVersion": "v1",
			"kind": "ServiceAccount",
			"metadata": {
				"annotations": {
					"serviceaccounts.openshift.io/oauth-redirectreference.jenkins": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"${JENKINS_SERVICE_NAME}\"}}"
				},
				"name": "${JENKINS_SERVICE_NAME}"
			}
		},
		{
			"apiVersion": "v1",
			"groupNames": null,
			"kind": "RoleBinding",
			"metadata": {
				"name": "${JENKINS_SERVICE_NAME}_edit"
			},
			"roleRef": {
				"name": "edit"
			},
			"subjects": [
				{
					"kind": "ServiceAccount",
					"name": "${JENKINS_SERVICE_NAME}"
				}
			]
		},
		{
			"apiVersion": "v1",
			"kind": "Service",
			"metadata": {
				"name": "${JNLP_SERVICE_NAME}"
			},
			"spec": {
				"ports": [
					{
						"name": "agent",
						"nodePort": 0,
						"port": 50000,
						"protocol": "TCP",
						"targetPort": 50000
					}
				],
				"selector": {
					"name": "${JENKINS_SERVICE_NAME}"
				},
				"sessionAffinity": "None",
				"type": "ClusterIP"
			}
		},
		{
			"apiVersion": "v1",
			"kind": "Service",
			"metadata": {
				"annotations": {
					"service.alpha.openshift.io/dependencies": "[{\"name\": \"${JNLP_SERVICE_NAME}\", \"namespace\": \"\", \"kind\": \"Service\"}]",
					"service.openshift.io/infrastructure": "true"
				},
				"name": "${JENKINS_SERVICE_NAME}"
			},
			"spec": {
				"ports": [
					{
						"name": "web",
						"nodePort": 0,
						"port": 80,
						"protocol": "TCP",
						"targetPort": 8080
					}
				],
				"selector": {
					"name": "${JENKINS_SERVICE_NAME}"
				},
				"sessionAffinity": "None",
				"type": "ClusterIP"
			}
		}
	],
	"parameters": [
		{
			"name": "JENKINS_SERVICE_NAME",
			"displayName": "Jenkins Service Name",
			"description": "The name of the OpenShift Service exposed for the Jenkins container.",
			"value": "jenkins"
		},
		{
			"name": "JNLP_SERVICE_NAME",
			"displayName": "Jenkins JNLP Service Name",
			"description": "The name of the service used for master/slave communication.",
			"value": "jenkins-jnlp"
		},
		{
			"name": "ENABLE_OAUTH",
			"displayName": "Enable OAuth in Jenkins",
			"description": "Whether to enable OAuth OpenShift integration. If false, the static account 'admin' will be initialized with the password 'password'.",
			"value": "true"
		},
		{
			"name": "MEMORY_LIMIT",
			"displayName": "Memory Limit",
			"description": "Maximum amount of memory the container can use.",
			"value": "1Gi"
		},
		{
			"name": "VOLUME_CAPACITY",
			"displayName": "Volume Capacity",
			"description": "Volume space available for data, e.g. 512Mi, 2Gi.",
			"value": "1Gi",
			"required": true
		},
		{
			"name": "NAMESPACE",
			"displayName": "Jenkins ImageStream Namespace",
			"description": "The OpenShift Namespace where the Jenkins ImageStream resides.",
			"value": "openshift"
		},
		{
			"name": "DISABLE_ADMINISTRATIVE_MONITORS",
			"displayName": "Disable memory intensive administrative monitors",
			"description": "Whether to perform memory intensive, possibly slow, synchronization with the Jenkins Update Center on start.  If true, the Jenkins core update monitor and site warnings monitor are disabled.",
			"value": "false"
		},
		{
			"name": "JENKINS_IMAGE_STREAM_TAG",
			"displayName": "Jenkins ImageStreamTag",
			"description": "Name of the ImageStreamTag to be used for the Jenkins image.",
			"value": "jenkins:2"
		},
		{
			"name": "ENABLE_FATAL_ERROR_LOG_FILE",
			"displayName": "Fatal Error Log File",
			"description": "When a fatal error occurs, an error log is created with information and the state obtained at the time of the fatal error.",
			"value": "false"
		},
		{
			"name": "JENKINS_UC_INSECURE",
			"displayName": "Allows use of Jenkins Update Center repository with invalid SSL certificate",
			"description": "Whether to allow use of a Jenkins Update Center that uses invalid certificate (self-signed, unknown CA). If any value other than 'false', certificate check is bypassed. By default, certificate check is enforced.",
			"value": "false"
		}
	],
	"labels": {
		"app": "jenkins-persistent",
		"template": "jenkins-persistent-template"
	}
}