Update harbor to be in line with our Provider utils form

This commit is contained in:
2025-11-14 21:41:28 -06:00
parent 1564dcb285
commit bdfb86c5a0

View File

@@ -1,42 +1,39 @@
(ns utils.harbor (ns utils.harbor
(:require (:require
[utils.general :refer [resource-factory component-factory]] [utils.general :refer [resource-factory component-factory deploy-stack-factory iterate-stack]]
[utils.vault :refer [retrieve]] [utils.vault :refer [retrieve]]
["uuid" :as uuid] ["uuid" :as uuid]
["@pulumiverse/harbor" :as harbor])) ["@pulumiverse/harbor" :as harbor]))
(defn default-project [{:keys [name]}] (defn project [{:keys [app-name]}]
{:name name {:name app-name
:public false}) :public false})
(defn default-robot [{:keys [name]}] (defn robot [{:keys [app-name]}]
{:name (str name "-robot") {:name (str app-name "-robot")
:level "project" :level "project"
:permissions [{:kind "project" :permissions [{:kind "project"
:namespace name :namespace app-name
:access [{:action "push" :resource "repository"} :access [{:action "push" :resource "repository"}
{:action "pull" :resource "repository"} {:action "pull" :resource "repository"}
{:action "list" :resource "repository"}]}]}) {:action "list" :resource "repository"}]}]})
(defn create-provider [final-args] (def defaults
(let [name (str "harbor-provider-" (uuid/v4))] {:project project
(harbor/Provider. name final-args))) :robot robot})
(def default-resource-class-map (def provider-template
{:project (.. harbor -Project) {:constructor (.. harbor -Provider)
:robot-account (.. harbor -RobotAccount)}) :name "harbor-provider"
(def create-resource (resource-factory default-resource-class-map)) :config {:url 'url
(def create-component (component-factory create-resource)) :username 'username
:password 'password}})
(defn deploy-stack
"Deploys a versatile stack of Harbor resources" (def component-specs-defs
[& args] {:root-sym 'harbor
(let [[component-kws [options]] (split-with keyword? args) :provider-key :harbor
requested-components (set component-kws) :resources
{:keys [provider vault-provider pulumi-cfg name harbor-app-name harbor-app-namespace project-opts robot-opts]} options {:project {:path ['-Project]}
prepared-vault-data (when (requested-components :vault-secrets) (retrieve vault-provider harbor-app-name harbor-app-namespace)) :robot-account {:path ['-RobotAccount]
{:keys [secrets]} (or prepared-vault-data {:secrets nil}) :defaults-name 'robot}}})
project (create-component requested-components :project provider name (vec (filter some? [provider])) project-opts (default-project options) secrets options)
robot-account (create-component requested-components :robot-account provider (str name "-robot") (vec (filter some? [provider project])) robot-opts (default-robot (assoc options :project project)) secrets options)]
{:project project, :robot-account robot-account, :vault-secrets prepared-vault-data}))