A trivial guestbook app
Functions for GET and POST endpoints. A redis.yaml to deploy redis on kubernetes. And a deploy.sh to deploy the fission functions with routes.
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
#
|
||||||
|
# Handles POST /guestbook -- adds item to guestbook
|
||||||
|
#
|
||||||
|
|
||||||
|
from flask import request, redirect
|
||||||
|
import redis
|
||||||
|
|
||||||
|
# Connect to redis.
|
||||||
|
redisConnection = redis.StrictRedis(host='redis.guestbook', port=6379, db=0)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# Read the item from POST params, add it to redis, and redirect
|
||||||
|
# back to the list
|
||||||
|
item = request.form['text']
|
||||||
|
redisConnection.rpush('guestbook', item)
|
||||||
|
return redirect('/guestbook', code=303)
|
||||||
Executable
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
kubectl create -f redis.yaml
|
||||||
|
|
||||||
|
if [ -z "$FISSION_URL" ]
|
||||||
|
then
|
||||||
|
echo "Need $FISSION_URL set to a fission controller address"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
fission env create --name python --image fission/python-env
|
||||||
|
fission function create --name guestbook-get --env python --code get.py --url /guestbook --method GET
|
||||||
|
fission function create --name guestbook-add --env python --code add.py --url /guestbook --method POST
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#
|
||||||
|
# Handles GET /guestbook -- returns a list of items in the guestbook
|
||||||
|
# with a form to add more.
|
||||||
|
#
|
||||||
|
|
||||||
|
from flask import current_app, escape
|
||||||
|
import redis
|
||||||
|
|
||||||
|
# Connect to redis. This is run only when this file is loaded; as
|
||||||
|
# long as the pod is alive, the connection is reused.
|
||||||
|
redisConnection = redis.StrictRedis(host='redis.guestbook', port=6379, db=0)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
messages = redisConnection.lrange('guestbook', 0, -1)
|
||||||
|
|
||||||
|
items = [("<li>%s</li>" % escape(m.decode('utf-8'))) for m in messages]
|
||||||
|
ul = "<ul>%s</ul>" % "\n".join(items)
|
||||||
|
return """
|
||||||
|
<html><body>
|
||||||
|
<h1>Guestbook</h1>
|
||||||
|
<form action="/guestbook" method="POST">
|
||||||
|
<input type="text" name="text">
|
||||||
|
<button type="submit">Add</button>
|
||||||
|
</form>
|
||||||
|
<hr/>
|
||||||
|
%s
|
||||||
|
</body></html>
|
||||||
|
""" % ul
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: guestbook
|
||||||
|
labels:
|
||||||
|
name: guestbook
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: extensions/v1beta1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
run: redis
|
||||||
|
name: redis
|
||||||
|
namespace: guestbook
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
run: redis
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
run: redis
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: redis
|
||||||
|
name: redis
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
run: redis
|
||||||
|
name: redis
|
||||||
|
namespace: guestbook
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
run: redis
|
||||||
|
type: ClusterIP
|
||||||
|
ports:
|
||||||
|
- port: 6379
|
||||||
|
protocol: TCP
|
||||||
|
targetPort: 6379
|
||||||
Reference in New Issue
Block a user