WIP: Some refactoring
This commit is contained in:
@ -24,45 +24,50 @@ func ReadTheConfig(path string) (*config.Config, error) {
|
||||
return conf, nil
|
||||
}
|
||||
|
||||
func Reconcile(workdirPath, sshKeyPath string, conf *config.Config, dry bool) error {
|
||||
dir, err := workdir.CreateWorkdir(workdirPath)
|
||||
func Reconcile(definedWorkdirPath, sshKeyPath string, conf *config.Config, dry bool) error {
|
||||
// Start by creating a directory where everything should be happening
|
||||
configPath := filepath.Dir(conf.ConfigPath)
|
||||
workdirPath, err := workdir.CreateWorkdir(definedWorkdirPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Prepare repositories
|
||||
|
||||
// Prepare helm repositories
|
||||
for _, repository := range conf.Repositories {
|
||||
if err := repository.ValidateURL(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := repository.KindFromUrl(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Configure a git client
|
||||
gh := githelper.NewGit(sshKeyPath)
|
||||
|
||||
// The main logic starts here
|
||||
for _, cluster := range conf.Clusters {
|
||||
fullPath := fmt.Sprintf("%s/%s", dir, cluster.Name)
|
||||
provider, err := providers.NewProvider(cluster.Provider, fullPath, conf.SopsBin, gh)
|
||||
// Create a dir for the cluster git repo
|
||||
clusterWorkdirPath := fmt.Sprintf("%s/%s", workdirPath, cluster.Name)
|
||||
|
||||
// Init a gitops provider (Currently onle flux is supported)
|
||||
provider, err := providers.NewProvider(cluster.Provider, clusterWorkdirPath, conf.SopsBin, gh)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := cluster.CloneRepo(gh, fullPath, dry); err != nil {
|
||||
if err := cluster.CloneRepo(gh, clusterWorkdirPath, dry); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = cluster.BootstrapRepo(gh, fullPath, dry)
|
||||
if err := cluster.BootstrapRepo(gh, clusterWorkdirPath, dry); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Read the lockfile generated by the shoebill
|
||||
lockfileData, err := lockfile.NewFromFile(clusterWorkdirPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
lockfileData, err := lockfile.NewFromFile(fullPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
reposExisting, err := lockfileData.ReposFromLockfile()
|
||||
currentRepositories, err := lockfileData.ReposFromLockfile()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -71,61 +76,69 @@ func Reconcile(workdirPath, sshKeyPath string, conf *config.Config, dry bool) er
|
||||
return err
|
||||
}
|
||||
|
||||
// Init the helm client
|
||||
hh := helmhelper.NewHelm()
|
||||
|
||||
// Init the sops client
|
||||
sops := sopshelper.NewSops()
|
||||
|
||||
for _, release := range conf.Releases {
|
||||
release.InitRelease()
|
||||
err := release.VersionHandler(dir, hh)
|
||||
|
||||
err := release.VersionHandler(workdirPath, hh)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
release.ValuesHandler(filepath.Dir(conf.ConfigPath))
|
||||
if err := release.SecretsHandler(filepath.Dir(conf.ConfigPath), sops); err != nil {
|
||||
|
||||
release.ValuesHandler(configPath)
|
||||
|
||||
if err := release.SecretsHandler(configPath, sops); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
rsObj := release.FindReleaseByNames(cluster.Releases, conf.Releases)
|
||||
cluster.PopulateReleases(rsObj)
|
||||
releaseObj := release.FindReleaseByNames(cluster.Releases, conf.Releases)
|
||||
cluster.PopulateReleases(releaseObj)
|
||||
|
||||
releasesCurrent, err := release.ReleasesFromLockfile(lockfileData, conf.Repositories)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
diffRls, err := diff.DiffReleases(releasesCurrent, cluster.ReleasesObj)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
lockfile, err := diffRls.Resolve(reposExisting, fullPath)
|
||||
// Compare releases from the lockfile to ones from the current cluster config
|
||||
diffReleases, err := diff.DiffReleases(releasesCurrent, cluster.ReleasesObj)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := provider.SyncState(*diffRls); err != nil {
|
||||
lockfile, err := diffReleases.Resolve(currentRepositories, clusterWorkdirPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := kustomize.Generate(fullPath, gh); err != nil {
|
||||
if err := provider.SyncState(*diffReleases); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := lockfile.WriteToFile(fullPath); err != nil {
|
||||
if err := kustomize.Generate(clusterWorkdirPath, gh); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := gh.AddAllAndCommit(fullPath, "Update the lockfile"); err != nil {
|
||||
|
||||
if err := lockfile.WriteToFile(clusterWorkdirPath); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := gh.AddAllAndCommit(clusterWorkdirPath, "Update the lockfile"); err != nil {
|
||||
return err
|
||||
}
|
||||
if !dry {
|
||||
if err := gh.Push(fullPath); err != nil {
|
||||
if err := gh.Push(clusterWorkdirPath); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if !dry {
|
||||
if err := workdir.RemoveWorkdir(dir); err != nil {
|
||||
if err := workdir.RemoveWorkdir(workdirPath); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user