mirror of
https://github.com/onepanelio/onepanel.git
synced 2025-09-26 17:51:13 +08:00
279 lines
6.2 KiB
Go
279 lines
6.2 KiB
Go
package migration
|
|
|
|
import (
|
|
"fmt"
|
|
v1 "github.com/onepanelio/core/pkg"
|
|
"github.com/onepanelio/core/pkg/util/data"
|
|
uid2 "github.com/onepanelio/core/pkg/util/uid"
|
|
"path/filepath"
|
|
)
|
|
|
|
// createWorkspaceTemplate will create the workspace template given by {{templateName}} with the contents
|
|
// given by {{filename}}
|
|
// It will do so for all namespaces.
|
|
func createWorkspaceTemplate(filename, templateName, description string) error {
|
|
client, err := getClient()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer client.DB.Close()
|
|
|
|
namespaces, err := client.ListOnepanelEnabledNamespaces()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
filename = filepath.Join("db", "yaml", filename)
|
|
manifestFile, err := data.ManifestFileFromFile(filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
newManifest, err := manifestFile.SpecString()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
uid, err := uid2.GenerateUID(templateName, 30)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, namespace := range namespaces {
|
|
workspaceTemplate := &v1.WorkspaceTemplate{
|
|
UID: uid,
|
|
Name: templateName,
|
|
Manifest: newManifest,
|
|
Description: description,
|
|
}
|
|
|
|
err = ReplaceArtifactRepositoryType(client, namespace, nil, workspaceTemplate)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err := client.CreateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func archiveWorkspaceTemplate(templateName string) error {
|
|
client, err := getClient()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer client.DB.Close()
|
|
|
|
namespaces, err := client.ListOnepanelEnabledNamespaces()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
uid, err := uid2.GenerateUID(templateName, 30)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, namespace := range namespaces {
|
|
hasRunning, err := client.WorkspaceTemplateHasRunningWorkspaces(namespace.Name, uid)
|
|
if err != nil {
|
|
return fmt.Errorf("Unable to get check running workspaces")
|
|
}
|
|
if hasRunning {
|
|
return fmt.Errorf("unable to archive workspace template. There are running workspaces that use it")
|
|
}
|
|
|
|
_, err = client.ArchiveWorkspaceTemplate(namespace.Name, uid)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// updateWorkspaceTemplateManifest will update the workspace template given by {{templateName}} with the contents
|
|
// given by {{filename}}
|
|
// It will do so for all namespaces.
|
|
func updateWorkspaceTemplateManifest(filename, templateName string) error {
|
|
client, err := getClient()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer client.DB.Close()
|
|
|
|
filename = filepath.Join("db", "yaml", filename)
|
|
|
|
namespaces, err := client.ListOnepanelEnabledNamespaces()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
manifest, err := data.ManifestFileFromFile(filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
newManifest, err := manifest.SpecString()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
uid, err := uid2.GenerateUID(templateName, 30)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, namespace := range namespaces {
|
|
workspaceTemplate := &v1.WorkspaceTemplate{
|
|
UID: uid,
|
|
Name: templateName,
|
|
Manifest: newManifest,
|
|
}
|
|
err = ReplaceArtifactRepositoryType(client, namespace, nil, workspaceTemplate)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if _, err := client.UpdateWorkspaceTemplateManifest(namespace.Name, uid, workspaceTemplate.Manifest); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// createWorkflowTemplate will create the workflow template given by {{templateName}} with the contents
|
|
// given by {{filename}}
|
|
// It will do so for all namespaces.
|
|
func createWorkflowTemplate(filename, templateName string, labels map[string]string) error {
|
|
client, err := getClient()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer client.DB.Close()
|
|
|
|
namespaces, err := client.ListOnepanelEnabledNamespaces()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
filename = filepath.Join("db", "yaml", filename)
|
|
|
|
manifestFile, err := data.ManifestFileFromFile(filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
manifest, err := manifestFile.SpecString()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
uid, err := uid2.GenerateUID(templateName, 30)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, namespace := range namespaces {
|
|
workflowTemplate := &v1.WorkflowTemplate{
|
|
UID: uid,
|
|
Name: templateName,
|
|
Manifest: manifest,
|
|
Labels: labels,
|
|
}
|
|
|
|
workflowTemplate.Manifest, err = ReplaceRuntimeVariablesInManifest(client, namespace.Name, workflowTemplate.Manifest)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if _, err := client.CreateWorkflowTemplate(namespace.Name, workflowTemplate); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// updateWorkflowTemplateManifest will update the workflow template given by {{templateName}} with the contents
|
|
// given by {{filename}}
|
|
// It will do so for all namespaces.
|
|
func updateWorkflowTemplateManifest(filename, templateName string, labels map[string]string) error {
|
|
client, err := getClient()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer client.DB.Close()
|
|
|
|
namespaces, err := client.ListOnepanelEnabledNamespaces()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
filename = filepath.Join("db", "yaml", filename)
|
|
|
|
manifestFile, err := data.ManifestFileFromFile(filename)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
newManifest, err := manifestFile.SpecString()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
uid, err := uid2.GenerateUID(templateName, 30)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, namespace := range namespaces {
|
|
workflowTemplate := &v1.WorkflowTemplate{
|
|
UID: uid,
|
|
Name: templateName,
|
|
Manifest: newManifest,
|
|
Labels: labels,
|
|
}
|
|
|
|
workflowTemplate.Manifest, err = ReplaceRuntimeVariablesInManifest(client, namespace.Name, workflowTemplate.Manifest)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err := client.CreateWorkflowTemplateVersion(namespace.Name, workflowTemplate); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// archiveWorkflowTemplate removes a Workflow Template by a given templateName
|
|
func archiveWorkflowTemplate(templateName string) error {
|
|
client, err := getClient()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer client.DB.Close()
|
|
|
|
namespaces, err := client.ListOnepanelEnabledNamespaces()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
uid, err := uid2.GenerateUID(templateName, 30)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, namespace := range namespaces {
|
|
if _, err := client.ArchiveWorkflowTemplate(namespace.Name, uid); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|