From 68f4ca9ed495c491aacff8b4759e9460e01f0682 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Sun, 30 Sep 2018 13:24:55 -0400 Subject: [PATCH] simplification --- bruce_operator/core.py | 37 ++---- .../{_bruce-namespace.yml => _namespace.yml} | 0 deploy/app-resource-definition.yml | 13 --- deploy/buildpack-resource-definition.yml | 14 --- deploy/buildpacks-volume.yml | 14 --- deploy/heroku-buildpacks.yml | 66 ----------- deploy/operator.yml | 109 ++++++++++++++++++ 7 files changed, 121 insertions(+), 132 deletions(-) rename deploy/{_bruce-namespace.yml => _namespace.yml} (100%) delete mode 100644 deploy/app-resource-definition.yml delete mode 100644 deploy/buildpack-resource-definition.yml delete mode 100644 deploy/buildpacks-volume.yml delete mode 100644 deploy/heroku-buildpacks.yml diff --git a/bruce_operator/core.py b/bruce_operator/core.py index 11cde98..babd147 100644 --- a/bruce_operator/core.py +++ b/bruce_operator/core.py @@ -40,14 +40,12 @@ class Operator: self.client = kubernetes.client.CoreV1Api() self.custom_client = kubernetes.client.CustomObjectsApi(self.client.api_client) - # Ensure resource definitions. - self.ensure_namespace() - self.ensure_resource_definitions() - self.ensure_volumes() + # Ensure Registry. self.ensure_registry() # Fetch all the buildpacks. - # self.spawn_fetch_buildpacks() + c = self.spawn_fetch_buildpacks() + c.block() @property def installed_buildpacks(self): @@ -96,7 +94,7 @@ class Operator: except kubernetes.client.rest.ApiException: return None - def spawn_self(self, cmd, label, env=None): + def kube_spawn_self(self, cmd, label, env=None): if env is None: env = {} @@ -106,9 +104,12 @@ class Operator: f"run bruce-operator-{label}-{_hash} --image={OPERATOR_IMAGE} -n {WATCH_NAMESPACE} --restart=Never --quiet=True --record=True --image-pull-policy=Always -- bruce-operator {cmd}" ) - def ensure_namespace(self): - self.logger.info("Ensuring bruce namespace...") - kubectl(f"apply -f ./deploy/_bruce-namespace.yml", raise_on_error=False) + def spawn_self(self, cmd, label, env=None): + if env is None: + env = {} + + # TODO: ENV + return delegator.run(f"bruce-operator {cmd}", block=False) def ensure_kubeconfig(self): """Ensures that ~/.kube/config exists, when running in Kubernetes.""" @@ -136,25 +137,11 @@ class Operator: # Use the context. kc.use_context("context") - def ensure_resource_definitions(self): - # Create Buildpacks resource. - self.logger.info("Ensuring Buildpack resource definitions...") - kubectl( - f"apply -f ./deploy/buildpack-resource-definition.yml -n {WATCH_NAMESPACE}" - ) - - # Create Apps resource. - self.logger.info("Ensuring App resource definitions...") - kubectl(f"apply -f ./deploy/app-resource-definition.yml -n {WATCH_NAMESPACE}") - - def ensure_volumes(self): - self.logger.info("Ensuring Buildpack volume resource...") - kubectl(f"apply -f ./deploy/buildpacks-volume.yml -n {WATCH_NAMESPACE}") - def spawn_fetch_buildpacks(self): - self.spawn_self(f"fetch-buildpacks", label="fetch") + c = self.spawn_self(f"fetch-buildpacks", label="fetch") for buildpack in self.installed_buildpacks: self.logger.info(f"Pretending to fetch {buildpack_name!r} buildpack!") + return c def ensure_registry(self): self.logger.info("Ensuring Registry volume...") diff --git a/deploy/_bruce-namespace.yml b/deploy/_namespace.yml similarity index 100% rename from deploy/_bruce-namespace.yml rename to deploy/_namespace.yml diff --git a/deploy/app-resource-definition.yml b/deploy/app-resource-definition.yml deleted file mode 100644 index ff7dfbc..0000000 --- a/deploy/app-resource-definition.yml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: apps.bruce.kennethreitz.org -spec: - group: bruce.kennethreitz.org - names: - kind: App - listKind: appList - plural: apps - singular: app - scope: Namespaced - version: v1alpha1 diff --git a/deploy/buildpack-resource-definition.yml b/deploy/buildpack-resource-definition.yml deleted file mode 100644 index bd70cd5..0000000 --- a/deploy/buildpack-resource-definition.yml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: buildpacks.bruce.kennethreitz.org -spec: - group: bruce.kennethreitz.org - names: - kind: Buildpack - listKind: buildpackList - plural: buildpacks - singular: buildpack - shortNames: [bp,] - scope: Namespaced - version: v1alpha1 diff --git a/deploy/buildpacks-volume.yml b/deploy/buildpacks-volume.yml deleted file mode 100644 index 25d1b78..0000000 --- a/deploy/buildpacks-volume.yml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - creationTimestamp: null - labels: - io.kompose.service: buildpacks-volume - name: buildpacks-volume -spec: - accessModes: - - ReadWriteMany - resources: - requests: - storage: 2Gi -status: {} diff --git a/deploy/heroku-buildpacks.yml b/deploy/heroku-buildpacks.yml deleted file mode 100644 index e6fc232..0000000 --- a/deploy/heroku-buildpacks.yml +++ /dev/null @@ -1,66 +0,0 @@ -apiVersion: v1 -items: -- apiVersion: bruce.kennethreitz.org/v1alpha1 - kind: Buildpack - metadata: - name: "ruby" - buildkit: "heroku/ruby" -- apiVersion: bruce.kennethreitz.org/v1alpha1 - kind: Buildpack - metadata: - name: "nodejs" - buildkit: "heroku/nodejs" -- apiVersion: bruce.kennethreitz.org/v1alpha1 - kind: Buildpack - metadata: - name: "clojure" - buildkit: "heroku/clojure" -- apiVersion: bruce.kennethreitz.org/v1alpha1 - kind: Buildpack - metadata: - name: "python" - buildkit: "heroku/python" -- apiVersion: bruce.kennethreitz.org/v1alpha1 - kind: Buildpack - metadata: - name: "java" - buildkit: "heroku/java" -- apiVersion: bruce.kennethreitz.org/v1alpha1 - kind: Buildpack - metadata: - name: "gradle" - buildkit: "heroku/gradle" -- apiVersion: bruce.kennethreitz.org/v1alpha1 - kind: Buildpack - metadata: - name: "scala" - buildkit: "heroku/scala" -- apiVersion: bruce.kennethreitz.org/v1alpha1 - kind: Buildpack - metadata: - name: "php" - buildkit: "heroku/php" -- apiVersion: bruce.kennethreitz.org/v1alpha1 - kind: Buildpack - metadata: - name: "go" - buildkit: "heroku/go" -- apiVersion: bruce.kennethreitz.org/v1alpha1 - kind: Buildpack - metadata: - name: "elixir" - buildkit: "hashnuke/elixir" -- apiVersion: bruce.kennethreitz.org/v1alpha1 - kind: Buildpack - metadata: - name: "static" - repo: "https://github.com/dokku/buildpack-nginx" -- apiVersion: bruce.kennethreitz.org/v1alpha1 - kind: Buildpack - metadata: - name: "multi" - repo: "https://github.com/heroku/heroku-buildpack-multi" -kind: List -metadata: - resourceVersion: "" - selfLink: "" diff --git a/deploy/operator.yml b/deploy/operator.yml index 9d23861..ce7b9b3 100644 --- a/deploy/operator.yml +++ b/deploy/operator.yml @@ -75,3 +75,112 @@ spec: io.kompose.service: bruce-operator status: loadBalancer: {} +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: buildpacks.bruce.kennethreitz.org +spec: + group: bruce.kennethreitz.org + names: + kind: Buildpack + listKind: buildpackList + plural: buildpacks + singular: buildpack + shortNames: [bp,] + scope: Namespaced + version: v1alpha1 +--- +metadata: + creationTimestamp: null + labels: + io.kompose.service: buildpacks-volume + name: buildpacks-volume +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 5Gi +status: {} +--- +apiVersion: v1 +items: +- apiVersion: bruce.kennethreitz.org/v1alpha1 + kind: Buildpack + metadata: + name: "ruby" + buildkit: "heroku/ruby" +- apiVersion: bruce.kennethreitz.org/v1alpha1 + kind: Buildpack + metadata: + name: "nodejs" + buildkit: "heroku/nodejs" +- apiVersion: bruce.kennethreitz.org/v1alpha1 + kind: Buildpack + metadata: + name: "clojure" + buildkit: "heroku/clojure" +- apiVersion: bruce.kennethreitz.org/v1alpha1 + kind: Buildpack + metadata: + name: "python" + buildkit: "heroku/python" +- apiVersion: bruce.kennethreitz.org/v1alpha1 + kind: Buildpack + metadata: + name: "java" + buildkit: "heroku/java" +- apiVersion: bruce.kennethreitz.org/v1alpha1 + kind: Buildpack + metadata: + name: "gradle" + buildkit: "heroku/gradle" +- apiVersion: bruce.kennethreitz.org/v1alpha1 + kind: Buildpack + metadata: + name: "scala" + buildkit: "heroku/scala" +- apiVersion: bruce.kennethreitz.org/v1alpha1 + kind: Buildpack + metadata: + name: "php" + buildkit: "heroku/php" +- apiVersion: bruce.kennethreitz.org/v1alpha1 + kind: Buildpack + metadata: + name: "go" + buildkit: "heroku/go" +- apiVersion: bruce.kennethreitz.org/v1alpha1 + kind: Buildpack + metadata: + name: "elixir" + buildkit: "hashnuke/elixir" +- apiVersion: bruce.kennethreitz.org/v1alpha1 + kind: Buildpack + metadata: + name: "static" + repo: "https://github.com/dokku/buildpack-nginx" +- apiVersion: bruce.kennethreitz.org/v1alpha1 + kind: Buildpack + metadata: + name: "multi" + repo: "https://github.com/heroku/heroku-buildpack-multi" +kind: List +metadata: + resourceVersion: "" + selfLink: "" +--- +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: apps.bruce.kennethreitz.org +spec: + group: bruce.kennethreitz.org + names: + kind: App + listKind: appList + plural: apps + singular: app + scope: Namespaced + version: v1alpha1