Skip to content

Instantly share code, notes, and snippets.

@jazzdan
Created July 30, 2020 19:53
Show Gist options
  • Select an option

  • Save jazzdan/b7cc541a49851ea7828fb295699c4b6d to your computer and use it in GitHub Desktop.

Select an option

Save jazzdan/b7cc541a49851ea7828fb295699c4b6d to your computer and use it in GitHub Desktop.
Tiltfile for kubebuilder
load('ext://restart_process', 'docker_build_with_restart')
IMG = 'controller:latest'
### FILL OUT THESE FIELDS
NAME = '' # name of Go module
DOMAIN = '' # domain for CRD
GROUP = '' # group for CRD
VERSION = '' # version for CRD
KIND = '' # kind for CRD
### END FIELDS THAT YOU NEED TO FILL OUT
DOCKERFILE = '''FROM golang:alpine
WORKDIR /
COPY ./bin/manager /
CMD ["/manager"]
'''
def ensure_set(name, var):
if var == '':
fail("%s is not set, take a look at lines 3-7 and set these variables" % name)
def yaml():
return local('cd config/manager; kustomize edit set image controller=' + IMG + '; cd ../..; kustomize build config/default')
def manifests():
return 'controller-gen crd:trivialVersions=true rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases;'
def generate():
return 'controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./...";'
def vetfmt():
return 'go vet ./...; go fmt ./...'
def binary():
return 'CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -o bin/manager main.go'
ensure_set("NAME", NAME)
ensure_set("DOMAIN", DOMAIN)
ensure_set("GROUP", GROUP)
ensure_set("VERSION", VERSION)
ensure_set("KIND", KIND)
initting = False
if os.path.exists('go.mod') == False:
initting = True
local("go mod init %s" % NAME)
if os.path.exists('PROJECT') == False:
initting = True
local("kubebuilder init --domain %s" % DOMAIN)
if os.path.exists('api') == False:
initting = True
local("kubebuilder create api --resource --controller --group %s --version %s --kind %s" % (GROUP, VERSION, KIND))
local(manifests() + generate())
local_resource('crd', manifests() + 'kustomize build config/crd | kubectl apply -f -', deps=["api"])
#local_resource('un-crd', 'kustomize build config/crd | kubectl delete -f -', auto_init=False, trigger_mode=TRIGGER_MODE_MANUAL)
k8s_yaml(yaml())
deps = ['controllers', 'main.go']
if initting == False:
deps.append('api')
local_resource('recompile', generate() + binary(), deps=deps)
docker_build_with_restart(IMG, '.',
dockerfile_contents=DOCKERFILE,
entrypoint='/manager',
only=['./bin/manager'],
live_update=[
sync('./bin/manager', '/manager'),
]
)
@vkorbes
Copy link
Copy Markdown

vkorbes commented Aug 6, 2020

I had to change line 68 to avoid an infinite loop. Changed it to:

local_resource('recompile', generate() + binary(), deps=deps, ignore=['bin', '*/*/zz_generated.deepcopy.go'])

@jazzdan
Copy link
Copy Markdown
Author

jazzdan commented Aug 6, 2020

ahh good catch @ellenkorbes!

@brenix
Copy link
Copy Markdown

brenix commented Sep 29, 2020

This was helpful, thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment