WIP: start adding values support
This commit is contained in:
@ -1,8 +1,11 @@
|
||||
package providers
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"git.badhouseplants.net/allanger/shoebill/internal/config/release"
|
||||
"git.badhouseplants.net/allanger/shoebill/internal/config/repository"
|
||||
@ -10,6 +13,7 @@ import (
|
||||
"git.badhouseplants.net/allanger/shoebill/internal/utils/githelper"
|
||||
release_v2beta1 "github.com/fluxcd/helm-controller/api/v2beta1"
|
||||
helmrepo_v1beta2 "github.com/fluxcd/source-controller/api/v1beta2"
|
||||
"github.com/sirupsen/logrus"
|
||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"sigs.k8s.io/yaml"
|
||||
)
|
||||
@ -30,6 +34,7 @@ func (f *Flux) SyncState(diff diff.Diff) error {
|
||||
entity := "repository"
|
||||
srcPath := fmt.Sprintf("%s/src", f.path)
|
||||
filePath := fmt.Sprintf("%s/%s-", srcPath, entity)
|
||||
|
||||
for _, repo := range diff.DeletedRepositories {
|
||||
if err := os.Remove(filePath + repo.Name + ".yaml"); err != nil {
|
||||
return err
|
||||
@ -44,6 +49,7 @@ func (f *Flux) SyncState(diff diff.Diff) error {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
for _, repo := range diff.UpdatedRepositories {
|
||||
manifest, err := GenerateRepository(repo)
|
||||
if err != nil {
|
||||
@ -85,9 +91,14 @@ func (f *Flux) SyncState(diff diff.Diff) error {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
entity = "release"
|
||||
filePath = fmt.Sprintf("%s/%s-", srcPath, entity)
|
||||
|
||||
for _, release := range diff.AddedReleases {
|
||||
if err := SyncValues(release, srcPath); err != nil {
|
||||
return err
|
||||
}
|
||||
manifest, err := GenerateRelease(release)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -113,7 +124,9 @@ func (f *Flux) SyncState(diff diff.Diff) error {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for _, release := range diff.UpdatedReleases {
|
||||
SyncValues(release, srcPath)
|
||||
manifest, err := GenerateRelease(release)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -136,6 +149,7 @@ func (f *Flux) SyncState(diff diff.Diff) error {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for _, release := range diff.DeletedReleases {
|
||||
if err := os.Remove(filePath + release.Release + ".yaml"); err != nil {
|
||||
return err
|
||||
@ -210,3 +224,50 @@ func GenerateRelease(release *release.Release) ([]byte, error) {
|
||||
}
|
||||
return yaml.Marshal(&fluxRelease)
|
||||
}
|
||||
|
||||
func SyncValues(release *release.Release, path string) error {
|
||||
for _, valueFile := range release.Values {
|
||||
// Prepare a dir for values
|
||||
valuesPath := fmt.Sprintf("%s/%s", path, "values")
|
||||
if _, err := os.Stat(valuesPath); errors.Is(err, os.ErrNotExist) {
|
||||
err := os.Mkdir(valuesPath, os.ModePerm)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
destFileName := fmt.Sprintf("%s/%s-%s", valuesPath, release.Release, filepath.Base(valueFile))
|
||||
logrus.Info(destFileName)
|
||||
logrus.Info(valueFile)
|
||||
var dstValues *os.File
|
||||
var srcValues *os.File
|
||||
var err error
|
||||
srcValues, err = os.Open(valueFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer srcValues.Close()
|
||||
if _, err = os.Stat(destFileName); err == nil {
|
||||
dstValues, err = os.Open(destFileName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer dstValues.Close()
|
||||
} else if errors.Is(err, os.ErrNotExist) {
|
||||
dstValues, err = os.Create(destFileName)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
defer dstValues.Close()
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
_, err = io.Copy(dstValues, srcValues)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user