This commit is contained in:
		
							parent
							
								
									51ff9abe4c
								
							
						
					
					
						commit
						fce4f86987
					
				
					 6 changed files with 191 additions and 0 deletions
				
			
		
							
								
								
									
										78
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								.drone.yml
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,78 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					kind: pipeline
 | 
				
			||||||
 | 
					name: build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					steps:
 | 
				
			||||||
 | 
					- name: build image
 | 
				
			||||||
 | 
					  image: plugins/docker
 | 
				
			||||||
 | 
					  settings:
 | 
				
			||||||
 | 
					    repo: kleph/quake3-status
 | 
				
			||||||
 | 
					    tags: ${DRONE_COMMIT_SHA:0:8}
 | 
				
			||||||
 | 
					    username:
 | 
				
			||||||
 | 
					      from_secret: dockerhub_username
 | 
				
			||||||
 | 
					    password:
 | 
				
			||||||
 | 
					      from_secret: dockerhub_password
 | 
				
			||||||
 | 
					  when:
 | 
				
			||||||
 | 
					    event:
 | 
				
			||||||
 | 
					      exclude:
 | 
				
			||||||
 | 
					      - pull_request
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					deploy_commands_alias:
 | 
				
			||||||
 | 
					- &deploy_commands
 | 
				
			||||||
 | 
					  commands:
 | 
				
			||||||
 | 
					  - sed "s/__LEVEL__/$${LEVEL}/g" kube/q3-status-deployment.yaml > kube/q3-status-deployment-$${LEVEL}.yaml
 | 
				
			||||||
 | 
					  - sed "s/__NAMESPACE__/$${NAMESPACE}/g" kube/q3-status-deployment-$${LEVEL}.yaml > kube/q3-status-deployment-$${NAMESPACE}-$${LEVEL}.yaml
 | 
				
			||||||
 | 
					  - sed "s/__IMAGE_TAG__/$${IMAGE_TAG}/g" kube/q3-status-deployment-$${NAMESPACE}-$${LEVEL}.yaml > kube/q3-status-deployment-$${NAMESPACE}-$${LEVEL}2.yaml
 | 
				
			||||||
 | 
					  - cat kube/q3-status-deployment-$${NAMESPACE}-$${LEVEL}2.yaml
 | 
				
			||||||
 | 
					  - echo "applying"
 | 
				
			||||||
 | 
					  - kubectl apply -f kube/q3-status-deployment-$${NAMESPACE}-$${LEVEL}2.yaml --namespace=q3
 | 
				
			||||||
 | 
					  - echo "== post deploy ($${LEVEL}) status:"
 | 
				
			||||||
 | 
					  - kubectl get deployments --namespace=q3
 | 
				
			||||||
 | 
					  - kubectl get pods --namespace=q3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					kind: pipeline
 | 
				
			||||||
 | 
					name: deploy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					steps:
 | 
				
			||||||
 | 
					- name: deploy staging
 | 
				
			||||||
 | 
					  image: sinlead/drone-kubectl
 | 
				
			||||||
 | 
					  settings:
 | 
				
			||||||
 | 
					    kubernetes_server:
 | 
				
			||||||
 | 
					      from_secret: kubectl_uri
 | 
				
			||||||
 | 
					    kubernetes_cert:
 | 
				
			||||||
 | 
					      from_secret: kubectl_cert
 | 
				
			||||||
 | 
					    kubernetes_token:
 | 
				
			||||||
 | 
					      from_secret: kubectl_token
 | 
				
			||||||
 | 
					  environment:
 | 
				
			||||||
 | 
					    IMAGE_TAG: ${DRONE_COMMIT_SHA:0:8}
 | 
				
			||||||
 | 
					    NAMESPACE: q3
 | 
				
			||||||
 | 
					    LEVEL: staging
 | 
				
			||||||
 | 
					  <<: *deploy_commands
 | 
				
			||||||
 | 
					  when:
 | 
				
			||||||
 | 
					    branch:
 | 
				
			||||||
 | 
					      exclude:
 | 
				
			||||||
 | 
					      - master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: deploy live
 | 
				
			||||||
 | 
					  image: sinlead/drone-kubectl
 | 
				
			||||||
 | 
					  settings:
 | 
				
			||||||
 | 
					    kubernetes_server:
 | 
				
			||||||
 | 
					      from_secret: kubectl_uri
 | 
				
			||||||
 | 
					    kubernetes_cert:
 | 
				
			||||||
 | 
					      from_secret: kubectl_cert
 | 
				
			||||||
 | 
					    kubernetes_token:
 | 
				
			||||||
 | 
					      from_secret: kubectl_token
 | 
				
			||||||
 | 
					  environment:
 | 
				
			||||||
 | 
					    IMAGE_TAG: ${DRONE_COMMIT_SHA:0:8}
 | 
				
			||||||
 | 
					    NAMESPACE: q3
 | 
				
			||||||
 | 
					    LEVEL: live
 | 
				
			||||||
 | 
					  <<: *deploy_commands
 | 
				
			||||||
 | 
					  when:
 | 
				
			||||||
 | 
					    branch:
 | 
				
			||||||
 | 
					      include:
 | 
				
			||||||
 | 
					      - master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					depends_on:
 | 
				
			||||||
 | 
					- build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										9
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					FROM python:2-slim
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					RUN pip install flask
 | 
				
			||||||
 | 
					COPY /quake3_status.py /quake3_status.py
 | 
				
			||||||
 | 
					COPY /pyquake3.py /pyquake3.py
 | 
				
			||||||
 | 
					EXPOSE 5000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CMD ["python", "/quake3_status.py"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										31
									
								
								kube/q3-serviceaccount-deploy.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								kube/q3-serviceaccount-deploy.yaml
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,31 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					apiVersion: v1
 | 
				
			||||||
 | 
					kind: ServiceAccount
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: q3-deploy
 | 
				
			||||||
 | 
					  namespace: q3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					apiVersion: rbac.authorization.k8s.io/v1
 | 
				
			||||||
 | 
					kind: Role
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: q3-deploy-role
 | 
				
			||||||
 | 
					  namespace: q3 # Should be namespace you are granting access to
 | 
				
			||||||
 | 
					rules:
 | 
				
			||||||
 | 
					- apiGroups: ["*"]
 | 
				
			||||||
 | 
					  resources: ["*"]
 | 
				
			||||||
 | 
					  verbs: ["*"]
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					apiVersion: rbac.authorization.k8s.io/v1
 | 
				
			||||||
 | 
					kind: RoleBinding
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: q3-rolebinding
 | 
				
			||||||
 | 
					  namespace: q3
 | 
				
			||||||
 | 
					roleRef:
 | 
				
			||||||
 | 
					  apiGroup: rbac.authorization.k8s.io
 | 
				
			||||||
 | 
					  kind: Role
 | 
				
			||||||
 | 
					  name: q3-deploy-role
 | 
				
			||||||
 | 
					subjects:
 | 
				
			||||||
 | 
					- namespace: q3
 | 
				
			||||||
 | 
					  kind: ServiceAccount
 | 
				
			||||||
 | 
					  name: q3-deploy
 | 
				
			||||||
							
								
								
									
										24
									
								
								kube/q3-status-deployment.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								kube/q3-status-deployment.yaml
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					apiVersion: apps/v1
 | 
				
			||||||
 | 
					kind: Deployment
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: q3-status-deployment-__LEVEL__
 | 
				
			||||||
 | 
					  namespace: __NAMESPACE__
 | 
				
			||||||
 | 
					spec:
 | 
				
			||||||
 | 
					  selector:
 | 
				
			||||||
 | 
					    matchLabels:
 | 
				
			||||||
 | 
					      app: q3-status
 | 
				
			||||||
 | 
					      level: __LEVEL__
 | 
				
			||||||
 | 
					  replicas: 1
 | 
				
			||||||
 | 
					  template:
 | 
				
			||||||
 | 
					    metadata:
 | 
				
			||||||
 | 
					      labels:
 | 
				
			||||||
 | 
					        app: q3-status
 | 
				
			||||||
 | 
					        level: __LEVEL__
 | 
				
			||||||
 | 
					    spec:
 | 
				
			||||||
 | 
					      containers:
 | 
				
			||||||
 | 
					      - name: q3-status
 | 
				
			||||||
 | 
					        image: kleph/q3-status:__IMAGE_TAG__
 | 
				
			||||||
 | 
					        imagePullPolicy: Always
 | 
				
			||||||
 | 
					        ports:
 | 
				
			||||||
 | 
					        - containerPort: 5000
 | 
				
			||||||
							
								
								
									
										13
									
								
								kube/q3-status-service.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								kube/q3-status-service.yaml
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					apiVersion: v1
 | 
				
			||||||
 | 
					kind: Service
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: q3-status
 | 
				
			||||||
 | 
					  namespace: q3
 | 
				
			||||||
 | 
					spec:
 | 
				
			||||||
 | 
					  selector:
 | 
				
			||||||
 | 
					    app: q3-status
 | 
				
			||||||
 | 
					    level: live
 | 
				
			||||||
 | 
					  ports:
 | 
				
			||||||
 | 
					    - protocol: TCP
 | 
				
			||||||
 | 
					      port: 80
 | 
				
			||||||
 | 
					      targetPort: 5000
 | 
				
			||||||
							
								
								
									
										36
									
								
								quake3_status.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								quake3_status.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,36 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env python3.6
 | 
				
			||||||
 | 
					# -*- coding:utf-8 -*-
 | 
				
			||||||
 | 
					""" basic q3 status page for my home server """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from flask import Flask
 | 
				
			||||||
 | 
					from flask import render_template
 | 
				
			||||||
 | 
					from pyquake3 import PyQuake3
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pylint: disable=invalid-name
 | 
				
			||||||
 | 
					app = Flask(__name__)
 | 
				
			||||||
 | 
					app.url_map.strict_slashes = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@app.route('/')
 | 
				
			||||||
 | 
					def index(hours=None, minutes=None):
 | 
				
			||||||
 | 
					    """ main and only app """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    q3server = os.environ.get("Q3_SERVER")
 | 
				
			||||||
 | 
					    rcon_password = os.environ.get("RCONN_PASSWORD")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    q = PyQuake3(q3server, rcon_password)
 | 
				
			||||||
 | 
					    q.update()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    data = 'The name of %s is %s, running map %s with %s player(s).' % \
 | 
				
			||||||
 | 
					              (q.get_address(), q.vars['sv_hostname'], \
 | 
				
			||||||
 | 
					              q.vars['mapname'], len(q.players))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def main():
 | 
				
			||||||
 | 
					    """ main func """
 | 
				
			||||||
 | 
					    app.run(host='::')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    main()
 | 
				
			||||||
		Loading…
	
		Reference in a new issue