|
|
@ -0,0 +1,492 @@ |
|
|
|
|
|
{ |
|
|
|
|
|
"kind": "Template", |
|
|
|
|
|
"apiVersion": "v1", |
|
|
|
|
|
"metadata": { |
|
|
|
|
|
"name": "django-psql-persistent", |
|
|
|
|
|
"annotations": { |
|
|
|
|
|
"description": "An example Django application with a PostgreSQL database", |
|
|
|
|
|
"tags": "quickstart,python,django,postgresql", |
|
|
|
|
|
"iconClass": "icon-python" |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"labels": { |
|
|
|
|
|
"template": "django-psql-persistent" |
|
|
|
|
|
}, |
|
|
|
|
|
"objects": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"kind": "Service", |
|
|
|
|
|
"apiVersion": "v1", |
|
|
|
|
|
"metadata": { |
|
|
|
|
|
"name": "${NAME}", |
|
|
|
|
|
"annotations": { |
|
|
|
|
|
"description": "Exposes and load balances the application pods" |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"spec": { |
|
|
|
|
|
"ports": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "web", |
|
|
|
|
|
"port": 8080, |
|
|
|
|
|
"targetPort": 8080 |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
"selector": { |
|
|
|
|
|
"name": "${NAME}" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"kind": "Route", |
|
|
|
|
|
"apiVersion": "v1", |
|
|
|
|
|
"metadata": { |
|
|
|
|
|
"name": "${NAME}" |
|
|
|
|
|
}, |
|
|
|
|
|
"spec": { |
|
|
|
|
|
"host": "${APPLICATION_DOMAIN}", |
|
|
|
|
|
"to": { |
|
|
|
|
|
"kind": "Service", |
|
|
|
|
|
"name": "${NAME}" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"kind": "ImageStream", |
|
|
|
|
|
"apiVersion": "v1", |
|
|
|
|
|
"metadata": { |
|
|
|
|
|
"name": "${NAME}", |
|
|
|
|
|
"annotations": { |
|
|
|
|
|
"description": "Keeps track of changes in the application image" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"kind": "BuildConfig", |
|
|
|
|
|
"apiVersion": "v1", |
|
|
|
|
|
"metadata": { |
|
|
|
|
|
"name": "${NAME}", |
|
|
|
|
|
"annotations": { |
|
|
|
|
|
"description": "Defines how to build the application" |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"spec": { |
|
|
|
|
|
"source": { |
|
|
|
|
|
"type": "Git", |
|
|
|
|
|
"git": { |
|
|
|
|
|
"uri": "${SOURCE_REPOSITORY_URL}", |
|
|
|
|
|
"ref": "${SOURCE_REPOSITORY_REF}" |
|
|
|
|
|
}, |
|
|
|
|
|
"contextDir": "${CONTEXT_DIR}" |
|
|
|
|
|
}, |
|
|
|
|
|
"strategy": { |
|
|
|
|
|
"type": "Source", |
|
|
|
|
|
"sourceStrategy": { |
|
|
|
|
|
"from": { |
|
|
|
|
|
"kind": "ImageStreamTag", |
|
|
|
|
|
"namespace": "${NAMESPACE}", |
|
|
|
|
|
"name": "python:3.5" |
|
|
|
|
|
}, |
|
|
|
|
|
"env": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "PIP_INDEX_URL", |
|
|
|
|
|
"value": "${PIP_INDEX_URL}" |
|
|
|
|
|
} |
|
|
|
|
|
] |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"output": { |
|
|
|
|
|
"to": { |
|
|
|
|
|
"kind": "ImageStreamTag", |
|
|
|
|
|
"name": "${NAME}:latest" |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"triggers": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"type": "ImageChange" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"type": "ConfigChange" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"type": "GitHub", |
|
|
|
|
|
"github": { |
|
|
|
|
|
"secret": "${GITHUB_WEBHOOK_SECRET}" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
"postCommit": { |
|
|
|
|
|
"script": "./manage.py test" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"kind": "DeploymentConfig", |
|
|
|
|
|
"apiVersion": "v1", |
|
|
|
|
|
"metadata": { |
|
|
|
|
|
"name": "${NAME}", |
|
|
|
|
|
"annotations": { |
|
|
|
|
|
"description": "Defines how to deploy the application server" |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"spec": { |
|
|
|
|
|
"strategy": { |
|
|
|
|
|
"type": "Rolling" |
|
|
|
|
|
}, |
|
|
|
|
|
"triggers": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"type": "ImageChange", |
|
|
|
|
|
"imageChangeParams": { |
|
|
|
|
|
"automatic": true, |
|
|
|
|
|
"containerNames": [ |
|
|
|
|
|
"django-psql-persistent" |
|
|
|
|
|
], |
|
|
|
|
|
"from": { |
|
|
|
|
|
"kind": "ImageStreamTag", |
|
|
|
|
|
"name": "${NAME}:latest" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"type": "ConfigChange" |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
"replicas": 1, |
|
|
|
|
|
"selector": { |
|
|
|
|
|
"name": "${NAME}" |
|
|
|
|
|
}, |
|
|
|
|
|
"template": { |
|
|
|
|
|
"metadata": { |
|
|
|
|
|
"name": "${NAME}", |
|
|
|
|
|
"labels": { |
|
|
|
|
|
"name": "${NAME}" |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"spec": { |
|
|
|
|
|
"containers": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "django-psql-persistent", |
|
|
|
|
|
"image": " ", |
|
|
|
|
|
"ports": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"containerPort": 8080 |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
"readinessProbe": { |
|
|
|
|
|
"timeoutSeconds": 3, |
|
|
|
|
|
"initialDelaySeconds": 3, |
|
|
|
|
|
"httpGet": { |
|
|
|
|
|
"path": "/health", |
|
|
|
|
|
"port": 8080 |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"livenessProbe": { |
|
|
|
|
|
"timeoutSeconds": 3, |
|
|
|
|
|
"initialDelaySeconds": 30, |
|
|
|
|
|
"httpGet": { |
|
|
|
|
|
"path": "/health", |
|
|
|
|
|
"port": 8080 |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"env": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "DATABASE_SERVICE_NAME", |
|
|
|
|
|
"value": "${DATABASE_SERVICE_NAME}" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "DATABASE_ENGINE", |
|
|
|
|
|
"value": "${DATABASE_ENGINE}" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "DATABASE_NAME", |
|
|
|
|
|
"value": "${DATABASE_NAME}" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "DATABASE_USER", |
|
|
|
|
|
"value": "${DATABASE_USER}" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "DATABASE_PASSWORD", |
|
|
|
|
|
"value": "${DATABASE_PASSWORD}" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "APP_CONFIG", |
|
|
|
|
|
"value": "${APP_CONFIG}" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "DJANGO_SECRET_KEY", |
|
|
|
|
|
"value": "${DJANGO_SECRET_KEY}" |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
"resources": { |
|
|
|
|
|
"limits": { |
|
|
|
|
|
"memory": "${MEMORY_LIMIT}" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
] |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"kind": "PersistentVolumeClaim", |
|
|
|
|
|
"apiVersion": "v1", |
|
|
|
|
|
"metadata": { |
|
|
|
|
|
"name": "${DATABASE_SERVICE_NAME}" |
|
|
|
|
|
}, |
|
|
|
|
|
"spec": { |
|
|
|
|
|
"accessModes": [ |
|
|
|
|
|
"ReadWriteOnce" |
|
|
|
|
|
], |
|
|
|
|
|
"resources": { |
|
|
|
|
|
"requests": { |
|
|
|
|
|
"storage": "${VOLUME_CAPACITY}" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"kind": "Service", |
|
|
|
|
|
"apiVersion": "v1", |
|
|
|
|
|
"metadata": { |
|
|
|
|
|
"name": "${DATABASE_SERVICE_NAME}", |
|
|
|
|
|
"annotations": { |
|
|
|
|
|
"description": "Exposes the database server" |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"spec": { |
|
|
|
|
|
"ports": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "postgresql", |
|
|
|
|
|
"port": 5432, |
|
|
|
|
|
"targetPort": 5432 |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
"selector": { |
|
|
|
|
|
"name": "${DATABASE_SERVICE_NAME}" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"kind": "DeploymentConfig", |
|
|
|
|
|
"apiVersion": "v1", |
|
|
|
|
|
"metadata": { |
|
|
|
|
|
"name": "${DATABASE_SERVICE_NAME}", |
|
|
|
|
|
"annotations": { |
|
|
|
|
|
"description": "Defines how to deploy the database" |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"spec": { |
|
|
|
|
|
"strategy": { |
|
|
|
|
|
"type": "Recreate" |
|
|
|
|
|
}, |
|
|
|
|
|
"triggers": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"type": "ImageChange", |
|
|
|
|
|
"imageChangeParams": { |
|
|
|
|
|
"automatic": true, |
|
|
|
|
|
"containerNames": [ |
|
|
|
|
|
"postgresql" |
|
|
|
|
|
], |
|
|
|
|
|
"from": { |
|
|
|
|
|
"kind": "ImageStreamTag", |
|
|
|
|
|
"namespace": "${NAMESPACE}", |
|
|
|
|
|
"name": "postgresql:9.5" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"type": "ConfigChange" |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
"replicas": 1, |
|
|
|
|
|
"selector": { |
|
|
|
|
|
"name": "${DATABASE_SERVICE_NAME}" |
|
|
|
|
|
}, |
|
|
|
|
|
"template": { |
|
|
|
|
|
"metadata": { |
|
|
|
|
|
"name": "${DATABASE_SERVICE_NAME}", |
|
|
|
|
|
"labels": { |
|
|
|
|
|
"name": "${DATABASE_SERVICE_NAME}" |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"spec": { |
|
|
|
|
|
"volumes": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "${DATABASE_SERVICE_NAME}-data", |
|
|
|
|
|
"persistentVolumeClaim": { |
|
|
|
|
|
"claimName": "${DATABASE_SERVICE_NAME}" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
"containers": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "postgresql", |
|
|
|
|
|
"image": " ", |
|
|
|
|
|
"ports": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"containerPort": 5432 |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
"env": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "POSTGRESQL_USER", |
|
|
|
|
|
"value": "${DATABASE_USER}" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "POSTGRESQL_PASSWORD", |
|
|
|
|
|
"value": "${DATABASE_PASSWORD}" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "POSTGRESQL_DATABASE", |
|
|
|
|
|
"value": "${DATABASE_NAME}" |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
"volumeMounts": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "${DATABASE_SERVICE_NAME}-data", |
|
|
|
|
|
"mountPath": "/var/lib/pgsql/data" |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
"readinessProbe": { |
|
|
|
|
|
"timeoutSeconds": 1, |
|
|
|
|
|
"initialDelaySeconds": 5, |
|
|
|
|
|
"exec": { |
|
|
|
|
|
"command": [ "/bin/sh", "-i", "-c", "psql -h 127.0.0.1 -U ${POSTGRESQL_USER} -q -d ${POSTGRESQL_DATABASE} -c 'SELECT 1'"] |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"livenessProbe": { |
|
|
|
|
|
"timeoutSeconds": 1, |
|
|
|
|
|
"initialDelaySeconds": 30, |
|
|
|
|
|
"tcpSocket": { |
|
|
|
|
|
"port": 5432 |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
"resources": { |
|
|
|
|
|
"limits": { |
|
|
|
|
|
"memory": "${MEMORY_POSTGRESQL_LIMIT}" |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
] |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
"parameters": [ |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "NAME", |
|
|
|
|
|
"displayName": "Name", |
|
|
|
|
|
"description": "The name assigned to all of the frontend objects defined in this template.", |
|
|
|
|
|
"required": true, |
|
|
|
|
|
"value": "django-psql-persistent" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "NAMESPACE", |
|
|
|
|
|
"displayName": "Namespace", |
|
|
|
|
|
"required": true, |
|
|
|
|
|
"description": "The OpenShift Namespace where the ImageStream resides.", |
|
|
|
|
|
"value": "openshift" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "MEMORY_LIMIT", |
|
|
|
|
|
"displayName": "Memory Limit", |
|
|
|
|
|
"required": true, |
|
|
|
|
|
"description": "Maximum amount of memory the Django container can use.", |
|
|
|
|
|
"value": "512Mi" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "MEMORY_POSTGRESQL_LIMIT", |
|
|
|
|
|
"displayName": "Memory Limit (PostgreSQL)", |
|
|
|
|
|
"required": true, |
|
|
|
|
|
"description": "Maximum amount of memory the PostgreSQL container can use.", |
|
|
|
|
|
"value": "512Mi" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "VOLUME_CAPACITY", |
|
|
|
|
|
"displayName": "Volume Capacity", |
|
|
|
|
|
"description": "Volume space available for data, e.g. 512Mi, 2Gi", |
|
|
|
|
|
"value": "1Gi", |
|
|
|
|
|
"required": true |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "SOURCE_REPOSITORY_URL", |
|
|
|
|
|
"displayName": "Git Repository URL", |
|
|
|
|
|
"required": true, |
|
|
|
|
|
"description": "The URL of the repository with your application source code.", |
|
|
|
|
|
"value": "https://github.com/openshift/django-ex.git" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "SOURCE_REPOSITORY_REF", |
|
|
|
|
|
"displayName": "Git Reference", |
|
|
|
|
|
"description": "Set this to a branch name, tag or other ref of your repository if you are not using the default branch." |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "CONTEXT_DIR", |
|
|
|
|
|
"displayName": "Context Directory", |
|
|
|
|
|
"description": "Set this to the relative path to your project if it is not in the root of your repository." |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "APPLICATION_DOMAIN", |
|
|
|
|
|
"displayName": "Application Hostname", |
|
|
|
|
|
"description": "The exposed hostname that will route to the Django service, if left blank a value will be defaulted.", |
|
|
|
|
|
"value": "" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "GITHUB_WEBHOOK_SECRET", |
|
|
|
|
|
"displayName": "GitHub Webhook Secret", |
|
|
|
|
|
"description": "A secret string used to configure the GitHub webhook.", |
|
|
|
|
|
"generate": "expression", |
|
|
|
|
|
"from": "[a-zA-Z0-9]{40}" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "DATABASE_SERVICE_NAME", |
|
|
|
|
|
"displayName": "Database Service Name", |
|
|
|
|
|
"required": true, |
|
|
|
|
|
"value": "postgresql" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "DATABASE_ENGINE", |
|
|
|
|
|
"displayName": "Database Engine", |
|
|
|
|
|
"required": true, |
|
|
|
|
|
"description": "Database engine: postgresql, mysql or sqlite (default).", |
|
|
|
|
|
"value": "postgresql" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "DATABASE_NAME", |
|
|
|
|
|
"displayName": "Database Name", |
|
|
|
|
|
"required": true, |
|
|
|
|
|
"value": "default" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "DATABASE_USER", |
|
|
|
|
|
"displayName": "Database Username", |
|
|
|
|
|
"required": true, |
|
|
|
|
|
"value": "django" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "DATABASE_PASSWORD", |
|
|
|
|
|
"displayName": "Database User Password", |
|
|
|
|
|
"generate": "expression", |
|
|
|
|
|
"from": "[a-zA-Z0-9]{16}" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "APP_CONFIG", |
|
|
|
|
|
"displayName": "Application Configuration File Path", |
|
|
|
|
|
"description": "Relative path to Gunicorn configuration file (optional)." |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "DJANGO_SECRET_KEY", |
|
|
|
|
|
"displayName": "Django Secret Key", |
|
|
|
|
|
"description": "Set this to a long random string.", |
|
|
|
|
|
"generate": "expression", |
|
|
|
|
|
"from": "[\\w]{50}" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
"name": "PIP_INDEX_URL", |
|
|
|
|
|
"displayName": "Custom PyPi Index URL", |
|
|
|
|
|
"description": "The custom PyPi index URL", |
|
|
|
|
|
"value": "" |
|
|
|
|
|
} |
|
|
|
|
|
] |
|
|
|
|
|
} |