Skip to content

Commit

Permalink
feat(namespace): add project name and costcenter labels
Browse files Browse the repository at this point in the history
  • Loading branch information
ChristianGottinger committed Nov 28, 2023
1 parent ada74df commit 2ae41ac
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 10 deletions.
6 changes: 6 additions & 0 deletions cmd/copsctl/namespace.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ func createNamespaceCreateCommand(o *namespace.Orchestrator, cmd cli.Command) {
addUsersParam(namespaceCreateCmd)
addServiceAccountsParam(namespaceCreateCmd)
addNameParam(namespaceCreateCmd)
addProjectParam(namespaceCreateCmd)
}

func createNamespaceDeleteCommand(o *namespace.Orchestrator, cmd cli.Command) {
Expand Down Expand Up @@ -138,3 +139,8 @@ func addServiceAccountsParam(cmd cli.Command) {
func addNameParam(cmd cli.Command) {
cmd.AddPersistentParameterString(flags.Name, "", true, "n", "Name of the namespace")
}

func addProjectParam(cmd cli.Command) {
cmd.AddPersistentParameterString(flags.ProjectName, "", true, "p", "Name of the project hosted within namespace")
cmd.AddPersistentParameterString(flags.ProjectCostCenter, "", true, "c", "Costcenter project is billed")
}
11 changes: 10 additions & 1 deletion internal/adapters/kubernetes/cops_namespace.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ type CopsNamespaceResponse struct {
APIVersion string `yaml:"apiVersion"`
Kind string `yaml:"kind"`
Metadata struct {
Name string `yaml:"name"`
Name string `yaml:"name"`
Labels map[string]string `yaml:"labels"`
} `yaml:"metadata"`
Spec struct {
NamespaceAdminUsers []string `yaml:"namespaceAdminUsers"`
Expand All @@ -16,3 +17,11 @@ type CopsServiceAccount struct {
ServiceAccount string `yaml:"serviceAccount"`
Namespace string `yaml:"namespace"`
}

func (o CopsNamespaceResponse) GetProjectName() string {
return o.Metadata.Labels["conplement.de/projectName"]
}

func (o CopsNamespaceResponse) GetProjectCostCenter() string {
return o.Metadata.Labels["conplement.de/projectCostCenter"]
}
3 changes: 3 additions & 0 deletions internal/cmd/flags/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ const Name = "name"
const Users = "users"
const ServiceAccounts = "service-accounts"

const ProjectName = "projectname"
const ProjectCostCenter = "projectcostcenter"

const EnvironmentTag = "environment-tag"

const ConnectionString = "connection-string"
Expand Down
4 changes: 2 additions & 2 deletions internal/namespace/namespace.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func (o *Orchestrator) Create() {

users := parseUsernames(viper.GetString("users"))
serviceAccounts := parseServiceAccounts(viper.GetString("service-accounts"))
copsNamespace := renderTemplate(namespaceName, users, serviceAccounts)
copsNamespace := renderTemplate(namespaceName, users, serviceAccounts, viper.GetString(flags.ProjectName), viper.GetString(flags.ProjectCostCenter))

_, err := kubernetes.ApplyString(o.executor, copsNamespace)

Expand All @@ -55,7 +55,7 @@ func (o *Orchestrator) Delete() {
return
}

copsNamespace := renderTemplate(namespaceName, namespace.Spec.NamespaceAdminUsers, namespace.Spec.NamespaceAdminServiceAccounts)
copsNamespace := renderTemplate(namespaceName, namespace.Spec.NamespaceAdminUsers, namespace.Spec.NamespaceAdminServiceAccounts, namespace.GetProjectName(), namespace.GetProjectCostCenter())

_, error := kubernetes.DeleteString(o.executor, copsNamespace)

Expand Down
4 changes: 2 additions & 2 deletions internal/namespace/serviceaccounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ func (o *Orchestrator) AddServiceAccounts() {
}
}

copsNamespace := renderTemplate(namespaceName, existingUsers, relevantAccounts)
copsNamespace := renderTemplate(namespaceName, existingUsers, relevantAccounts, namespace.GetProjectName(), namespace.GetProjectCostCenter())

_, err = kubernetes.ApplyString(o.executor, copsNamespace)

Expand Down Expand Up @@ -113,7 +113,7 @@ func (o *Orchestrator) RemoveServiceAccounts() {
}
}

copsnamespace := renderTemplate(namespaceName, existingUsers, resultingAccounts)
copsnamespace := renderTemplate(namespaceName, existingUsers, resultingAccounts, namespace.GetProjectName(), namespace.GetProjectCostCenter())

_, err = kubernetes.ApplyString(o.executor, copsnamespace)

Expand Down
11 changes: 8 additions & 3 deletions internal/namespace/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,23 @@ func renderServiceAccounts(serviceAccounts []kubernetes.CopsServiceAccount) stri
return accountsList
}

func renderTemplate(namespaceName string, userNames []string, serviceAccounts []kubernetes.CopsServiceAccount) string {
func renderTemplate(namespaceName string, userNames []string, serviceAccounts []kubernetes.CopsServiceAccount, projectName string, projectCostCenter string) string {
copsnamespace := strings.Replace(copsNamespaceTemplate, "{{ namespaceName }}", namespaceName, -1)
copsnamespace = strings.Replace(copsnamespace, "{{ usernames }}", renderUsernames(userNames), -1)
copsnamespace = strings.Replace(copsnamespace, "{{ serviceAccounts }}", renderServiceAccounts(serviceAccounts), -1)
copsnamespace = strings.Replace(copsnamespace, "{{ projectCostCenter }}", projectCostCenter, -1)
copsnamespace = strings.Replace(copsnamespace, "{{ projectName }}", projectName, -1)
return copsnamespace
}

const copsNamespaceTemplate string = `
apiVersion: coreops.conplement.cloud/v1
apiVersion: coreops.conplement.cloud/v2
kind: CopsNamespace
metadata:
name: {{ namespaceName }}
spec:
{{ usernames }}
{{ serviceAccounts }}`
{{ serviceAccounts }}
projectCostCenter: "{{ projectCostCenter }}"
projectName: "{{ projectName }}"
`
4 changes: 2 additions & 2 deletions internal/namespace/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ func (o *Orchestrator) AddUsers() {
}
}

copsNamespace := renderTemplate(namespaceName, relevantUsers, existingServiceAccounts)
copsNamespace := renderTemplate(namespaceName, relevantUsers, existingServiceAccounts, namespace.GetProjectName(), namespace.GetProjectCostCenter())

_, err = kubernetes.ApplyString(o.executor, copsNamespace)

Expand Down Expand Up @@ -96,7 +96,7 @@ func (o *Orchestrator) RemoveUsers() {
}
}

copsNamespace := renderTemplate(namespaceName, relevantUsers, existingServiceAccounts)
copsNamespace := renderTemplate(namespaceName, relevantUsers, existingServiceAccounts, namespace.GetProjectName(), namespace.GetProjectCostCenter())

_, err = kubernetes.ApplyString(o.executor, copsNamespace)

Expand Down

0 comments on commit 2ae41ac

Please sign in to comment.