Update harbor to be in line with our Provider utils form
This commit is contained in:
@@ -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
|
(def component-specs-defs
|
||||||
"Deploys a versatile stack of Harbor resources"
|
{:root-sym 'harbor
|
||||||
[& args]
|
:provider-key :harbor
|
||||||
(let [[component-kws [options]] (split-with keyword? args)
|
:resources
|
||||||
requested-components (set component-kws)
|
{:project {:path ['-Project]}
|
||||||
{:keys [provider vault-provider pulumi-cfg name harbor-app-name harbor-app-namespace project-opts robot-opts]} options
|
:robot-account {:path ['-RobotAccount]
|
||||||
prepared-vault-data (when (requested-components :vault-secrets) (retrieve vault-provider harbor-app-name harbor-app-namespace))
|
:defaults-name 'robot}}})
|
||||||
{:keys [secrets]} (or prepared-vault-data {:secrets nil})
|
|
||||||
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}))
|
|
||||||
Reference in New Issue
Block a user