mirror of
https://github.com/ChristianLight/tutor.git
synced 2025-01-09 00:21:11 +00:00
fee5b8aa72
Because we use "exec" and not "run" like in the local install, we need to explicitely define the django settings (which sucks). This should be improved by using k8s Jobs.
129 lines
5.9 KiB
Makefile
129 lines
5.9 KiB
Makefile
.PHONY: env volumes services deployments
|
||
.DEFAULT_GOAL := help
|
||
|
||
podname = kubectl get pods -n openedx --selector=app=$(1) -o name | head -1 | cut -d '/' -f 2
|
||
podexec = kubectl exec -n openedx -it $$($(call podname,$(1))) -- $(2)
|
||
|
||
all: configure deploy databases ## Provision a full platform from scratch
|
||
|
||
configure: ## Interactive configuration
|
||
@$(MAKE) -s -C ../.. --always-make config.json
|
||
@$(MAKE) -s env
|
||
|
||
env: ## Generate the environment from templates and configuration values
|
||
@$(MAKE) -s -C .. env
|
||
@$(MAKE) -s -C ../.. substitute TEMPLATES=$(PWD)/templates OUTPUT=$(PWD)/env
|
||
|
||
namespace: ## Create the platform namespace
|
||
kubectl create -f namespace.yml
|
||
configmaps: ## Create configmap objects
|
||
kubectl create configmap nginx-config --from-file=../env/nginx --namespace=openedx
|
||
kubectl create configmap mysql-config --from-env-file=../env/mysql/auth.env --namespace=openedx
|
||
kubectl create configmap openedx-settings-lms --from-file=../env/openedx/settings/lms --namespace=openedx
|
||
kubectl create configmap openedx-settings-cms --from-file=../env/openedx/settings/cms --namespace=openedx
|
||
kubectl create configmap openedx-config --from-file=../env/openedx/config --namespace=openedx
|
||
kubectl create configmap openedx-scripts --from-file=../env/openedx/scripts --namespace=openedx
|
||
volumes: ## Create volumes
|
||
kubectl create -f volumes/ --recursive=true --namespace=openedx
|
||
services: ## Create services
|
||
kubectl create -f services/ --recursive=true --namespace=openedx
|
||
deployments: ## Create deployments
|
||
kubectl create -f deployments/ --recursive=true --namespace=openedx
|
||
ingress: ## Create ingress
|
||
kubectl create -f env/ingress.yml --namespace=openedx
|
||
deploy: namespace volumes configmaps services deployments ingress ## Deploy a platform from scratch
|
||
|
||
upgrade: down ## Upgrade an already running platform
|
||
@$(MAKE) -s namespace || true
|
||
@$(MAKE) -s configmaps || true
|
||
@$(MAKE) -s volumes || true
|
||
@$(MAKE) -s services || true
|
||
@$(MAKE) -s deployments || true
|
||
@$(MAKE) -s ingress || true
|
||
|
||
down: ## Delete all non-persistent objects
|
||
kubectl delete -f services/ --recursive=true --namespace=openedx || true
|
||
kubectl delete -f deployments/ --recursive=true --namespace=openedx || true
|
||
kubectl delete configmap --all --namespace openedx || true
|
||
|
||
delete: ## Delete EVERYTHING! (with no confirmation at all)
|
||
# TODO ask question to make sure user reaaaaaaally want to do this
|
||
kubectl delete namespace openedx
|
||
|
||
|
||
##################### Databases
|
||
|
||
databases: provision-databases migrate #provision-oauth2 ## Bootstrap databases
|
||
provision-databases: ## Create necessary databases and users
|
||
$(call podexec,lms,bash /openedx/scripts/provision.sh)
|
||
provision-oauth2: ## Create users for SSO between services
|
||
$(call podexec,lms,bash /openedx/scripts/oauth2.sh)
|
||
migrate: migrate-openedx migrate-forum ## Perform all database migrations
|
||
migrate-openedx: migrate-lms migrate-cms reindex-courses ## Perform database migrations on LMS/CMS
|
||
migrate-lms:
|
||
$(call podexec,lms,bash -c 'dockerize -wait tcp://mysql:3306 -timeout 20s && ./manage.py lms migrate')
|
||
migrate-cms:
|
||
$(call podexec,cms,bash -c 'dockerize -wait tcp://mysql:3306 -timeout 20s && ./manage.py cms migrate')
|
||
migrate-forum: ## Perform database migrations on discussion forums
|
||
$(call podexec,forum,bash -c "bundle exec rake search:initialize && \
|
||
bundle exec rake search:rebuild_index")
|
||
migrate-notes: ## Perform database migrations for the Notes service
|
||
$(call podexec,notes,./manage.py migrate)
|
||
migrate-xqueue: ## Perform database migrations for the XQueue service
|
||
$(call podexec,xqueue,./manage.py migrate)
|
||
reindex-courses: ## Refresh course index so they can be found in the LMS search engine
|
||
$(call podexec,cms,./manage.py cms reindex_course --all --setup)
|
||
|
||
##################### Various Open edX commands
|
||
|
||
lms-shell: ## Launch a shell inside an lms pod
|
||
$(call podexec,lms,bash)
|
||
lms-exec: ## Execute a command inside an lms pod: make lms-exec COMMAND="..."
|
||
$(call podexec,lms,$(COMMAND))
|
||
pod-exec: ## Execute a command inside an arbitrary pod: make pod-exec APP=appname COMMAND="..."
|
||
$(call podexec,$(APP),$(COMMAND))
|
||
|
||
# TODO replace these tasks with Job objects
|
||
# Note that here, settings must be defined manually because "exec" does not use
|
||
# the docker entrypoint, and thus does not define the DJANGO_SETTINGS_MODULE
|
||
# environment variable.
|
||
demo-course: ## Import the demo course from edX
|
||
$(call podexec,cms,/bin/bash -c "\
|
||
git clone https://github.com/edx/edx-demo-course --branch open-release/hawthorn.2 --depth 1 ../edx-demo-course \
|
||
&& python ./manage.py cms --settings=tutor.production import ../data ../edx-demo-course")
|
||
|
||
staff-user: ## Create a user with admin rights: make staff-user USERNAME=... EMAIL=...
|
||
$(call podexec,lms,/bin/bash -c "\
|
||
./manage.py lms manage_user --superuser --staff ${USERNAME} ${EMAIL} \
|
||
&& ./manage.py lms --settings=tutor.production changepassword ${USERNAME}")
|
||
|
||
##################### Various minikube command
|
||
|
||
minikube-start: ## Start minikube
|
||
minikube start
|
||
minikube-stop: ## Stop minikube
|
||
minikube stop
|
||
minikube-dashboard: ## Open the minikube dashboard
|
||
minikube dashboard
|
||
minikube-ingress: ## Enable the ingress addon
|
||
minikube addons enable ingress
|
||
|
||
##################### Various k8s commands
|
||
|
||
k8s-proxy: ## Create a proxy to the Kubernetes API server
|
||
kubectl proxy
|
||
k8s-dashboard: ## Create the dashboard
|
||
kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
|
||
k8s-admin: ## Create an admin user for accessing the Kubernetes dashboard
|
||
kubectl -f admin.yml
|
||
k8s-admin-token: ## Print the admin token required to log in the dashboard
|
||
kubectl -n kube-system describe secret $$(kubectl -n kube-system get secret | grep admin-user | awk '{print $$1}') | grep token: | awk '{print $$2}'
|
||
|
||
##################### Information
|
||
|
||
ESCAPE =
|
||
help: ## Print this help
|
||
@grep -E '^([a-zA-Z0-9_-]+:.*?## .*|######* .+)$$' Makefile \
|
||
| sed 's/######* \(.*\)/\n $(ESCAPE)[1;31m\1$(ESCAPE)[0m/g' \
|
||
| awk 'BEGIN {FS = ":.*?## "}; {printf "\033[33m%-30s\033[0m %s\n", $$1, $$2}'
|