https://github.com/cirocosta/pizza-controller
That's right - order that nice pizza 🍕 with `kubectl`
https://github.com/cirocosta/pizza-controller
controller controller-runtime crd kubernetes
Last synced: 3 months ago
JSON representation
That's right - order that nice pizza 🍕 with `kubectl`
- Host: GitHub
- URL: https://github.com/cirocosta/pizza-controller
- Owner: cirocosta
- Created: 2020-12-09T21:49:15.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2020-12-10T23:17:55.000Z (almost 5 years ago)
- Last Synced: 2025-04-15T16:50:55.244Z (6 months ago)
- Topics: controller, controller-runtime, crd, kubernetes
- Language: Go
- Homepage: https://ops.tips/notes/kubernetes-pizza/
- Size: 47.9 KB
- Stars: 115
- Watchers: 1
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# pizza-controller
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](./docs) for CRD reference## usage
First, create a secret with the credit card information (_yeah, this is fine,
trust me_) to be used during payment:```yaml
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:
```yaml
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:```console
$ kubectl get pizzacustomer
NAME CLOSEST
you store-123
```Looking at the PizzaStore object, we can check out its menu:
```console
$ 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:
```yaml
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:
```console
$ kubectl get pizzaorder ma-pizza
NAME PRICE ID CONDITION AGE
order 9.030000 Wlz6HcE6BPlfQNlxDAXa OrderPlaced 68m
```## what's next?
are you _really_ into ordering pizza using `kubectl`?
like, really? are you sure?
here's what's missing:
- well, any .. tests :horse:
- 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 :sweat_smile: maybe you'll
carry it forward?## Installation
1. 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
```## thanks
The API part was _heavily_ inspired by these two projects:
- https://github.com/ggrammar/pizzapi
- https://github.com/harrybrwn/apizzaThank you!
## LICENSE
MIT