diff --git a/.gitignore b/.gitignore index fc4f1e2..eb5a316 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1 @@ -/target -Tiltfile -manifests/ +target diff --git a/Tiltfile b/Tiltfile new file mode 100644 index 0000000..217b896 --- /dev/null +++ b/Tiltfile @@ -0,0 +1,121 @@ +# Welcome to Tilt! +# To get you started as quickly as possible, we have created a +# starter Tiltfile for you. +# +# Uncomment, modify, and delete any commands as needed for your +# project's configuration. + + +# Output diagnostic messages +# You can print log messages, warnings, and fatal errors, which will +# appear in the (Tiltfile) resource in the web UI. Tiltfiles support +# multiline strings and common string operations such as formatting. +# +# More info: https://docs.tilt.dev/api.html#api.warn +print(""" +----------------------------------------------------------------- +✨ Hello Tilt! This appears in the (Tiltfile) pane whenever Tilt + evaluates this file. +----------------------------------------------------------------- +""".strip()) + + +# Build Docker image +# Tilt will automatically associate image builds with the resource(s) +# that reference them (e.g. via Kubernetes or Docker Compose YAML). + +# More info: https://docs.tilt.dev/api.html#api.docker_build + +docker_build('melenion/neon-operator', + context='.', +) + +docker_build('melenion/compute-node-v15', context="orig-compose/compute_wrapper", build_args={"REPOSITORY": "neondatabase", "COMPUTE_IMAGE": "compute-node-v15"}) + +k8s_yaml("crd.yaml") +k8s_kind('NeonDatabase', image_json_path='{.spec.compute_image_ref}') + +# Apply Kubernetes manifests +# Tilt will build & push any necessary images, re-deploying your +# resources as they change. +# +# More info: https://docs.tilt.dev/api.html#api.k8s_yaml +# +k8s_yaml(['manifests/deployment.yaml', 'manifests/rbac.yaml', 'manifests/example.yaml']) + + + + + +# Customize a Kubernetes resource +# By default, Kubernetes resource names are automatically assigned +# based on objects in the YAML manifests, e.g. Deployment name. +# +# Tilt strives for sane defaults, so calling k8s_resource is +# optional, and you only need to pass the arguments you want to +# override. +# +# More info: https://docs.tilt.dev/api.html#api.k8s_resource +# +# k8s_resource('my-deployment', +# # map one or more local ports to ports on your Pod +# port_forwards=['5000:8080'], +# # change whether the resource is started by default +# auto_init=False, +# # control whether the resource automatically updates +# trigger_mode=TRIGGER_MODE_MANUAL +# ) + + +# Run local commands +# Local commands can be helpful for one-time tasks like installing +# project prerequisites. They can also manage long-lived processes +# for non-containerized services or dependencies. +# +# More info: https://docs.tilt.dev/local_resource.html +# +# local_resource('install-helm', +# cmd='which helm > /dev/null || brew install helm', +# # `cmd_bat`, when present, is used instead of `cmd` on Windows. +# cmd_bat=[ +# 'powershell.exe', +# '-Noninteractive', +# '-Command', +# '& {if (!(Get-Command helm -ErrorAction SilentlyContinue)) {scoop install helm}}' +# ] +# ) + + +# Extensions are open-source, pre-packaged functions that extend Tilt +# +# More info: https://github.com/tilt-dev/tilt-extensions +# +load('ext://git_resource', 'git_checkout') + + +# Organize logic into functions +# Tiltfiles are written in Starlark, a Python-inspired language, so +# you can use functions, conditionals, loops, and more. +# +# More info: https://docs.tilt.dev/tiltfile_concepts.html +# +def tilt_demo(): + # Tilt provides many useful portable built-ins + # https://docs.tilt.dev/api.html#modules.os.path.exists + if os.path.exists('tilt-avatars/Tiltfile'): + # It's possible to load other Tiltfiles to further organize + # your logic in large projects + # https://docs.tilt.dev/multiple_repos.html + load_dynamic('tilt-avatars/Tiltfile') + watch_file('tilt-avatars/Tiltfile') + git_checkout('https://github.com/tilt-dev/tilt-avatars.git', + checkout_dir='tilt-avatars') + + +# Edit your Tiltfile without restarting Tilt +# While running `tilt up`, Tilt watches the Tiltfile on disk and +# automatically re-evaluates it on change. +# +# To see it in action, try uncommenting the following line with +# Tilt running. +# tilt_demo() diff --git a/manifests/deployment.yaml b/manifests/deployment.yaml new file mode 100644 index 0000000..25e9c4f --- /dev/null +++ b/manifests/deployment.yaml @@ -0,0 +1,24 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: neon-operator +spec: + selector: + matchLabels: + app: neon-operator + strategy: + type: Recreate + template: + metadata: + labels: + app: neon-operator + spec: + containers: + - name: neon-operator + image: melenion/neon-operator:latest + imagePullPolicy: Always + resources: + limits: + memory: "128Mi" + cpu: "500m" + serviceAccountName: neon-operator diff --git a/manifests/example.yaml b/manifests/example.yaml new file mode 100644 index 0000000..4a818e8 --- /dev/null +++ b/manifests/example.yaml @@ -0,0 +1,8 @@ +apiVersion: melenion.com/v1 +kind: NeonDatabase +metadata: + name: my-neon-database +spec: + compute_image_ref: "melenion/compute-node-v15" + neon_image_ref: "neondatabase/neon" + postgres_version: "15" diff --git a/manifests/rbac.yaml b/manifests/rbac.yaml new file mode 100644 index 0000000..cda8b5b --- /dev/null +++ b/manifests/rbac.yaml @@ -0,0 +1,54 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: neon-operator +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: neon-operator-cluster-role +rules: + - apiGroups: + - melenion.com + resources: + - neondatabases + verbs: + - "*" + - apiGroups: [""] + resources: + - pods + - services + - endpoints + - persistentvolumeclaims + - events + - configmaps + - secrets + - deployments + verbs: + - "*" + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - "*" + - apiGroups: + - apps + resources: + - deployments + - statefulsets + verbs: + - "*" +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: neon-operator-cluster-role-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: neon-operator-cluster-role +subjects: + - kind: ServiceAccount + name: neon-operator + namespace: default