making kubernetes do what it was always meant to do: order pizza.
- https://gum.co/kubernetes-crds to get up to speed with custom resources and controllers
- docs for CRD reference
First, create a secret with the credit card information (yeah, this is fine, trust me) to be used during payment:
kind: Secret
apiVersion: v1
metadata:
name: credit-card
stringData:
number: 123343132314232
expiration: 12/02
securityCode: 123
zip: m5d0l2
then, create a PizzaCustomer
, the representation of you, the customer:
kind: PizzaCustomer
apiVersion: ops.tips/v1alpha1
metadata:
name: you
spec:
firstName: barack
lastName: obama
email: obama@gov.gov
phone: "31241323"
streetNumber: "20"
streetName: King St
city: Toronto
state: "ON"
zip: m5lz8j
With the PizzaCustomer
object created, we can see what's the closest store available
for it:
$ kubectl get pizzacustomer
NAME CLOSEST
you store-123
Looking at the PizzaStore object, we can check out its menu:
$ kubectl get pizzastore store-123 -o yaml
kind: PizzaStore
metadata:
name: store-123
spec:
address: |
51 Niagara St
Toronto, ON M5V1C3
id: "10391"
phone: 416-364-3939
products:
- description: Unique Lymon (lemon-lime) flavor, clear, clean and crisp with no caffeine.
id: 2LSPRITE
name: Sprite
size: 2 Litre
Knowing what's available to us, we can place the order:
kind: PizzaOrder
apiVersion: ops.tips/v1
metadata:
name: ma-pizza
spec:
yeahSurePlaceThisOrder: true # otherwise, it'll just calculate the price
storeRef: {name: store-123}
customerRef: {name: you}
payment:
creditCardSecretRef: {name: cc}
items:
- ticker: 10SCREEN
quantity: 1
To keep track of what's going on with your pizza, check out the order's status:
$ kubectl get pizzaorder ma-pizza
NAME PRICE ID CONDITION AGE
order 9.030000 Wlz6HcE6BPlfQNlxDAXa OrderPlaced 68m
are you really into ordering pizza using kubectl
?
like, really? are you sure?
here's what's missing:
- well, any .. tests ๐ด
- order tracking (it's
xml
-based - SOAP stuff) - being more flexible with non-canadian folks (it's currently hardcoded for Canada, but could easily be changed)
at the moment I got my pizza .. development finished ๐ maybe you'll carry it forward?
- apply the manifest
git clone https://github.com/cirocosta/pizza-controller
cd pizza-controller
# using `kapp` - recommended :)
#
kapp deploy -a pizza-controller -f ./config/release.yaml
# OR .. plain old kubectl
#
kubectl apply -f ./config/release.yaml
The API part was heavily inspired by these two projects:
Thank you!
MIT