Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix crd patches #143

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 65 additions & 38 deletions pkg/charts/additionalchart.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,23 +48,24 @@ func (c *AdditionalChart) ApplyMainChanges(pkgFs billy.Filesystem) error {
if err != nil {
return fmt.Errorf("encountered error while trying to get the main chart's working directory: %s", err)
}
if err := helm.CopyCRDsFromChart(pkgFs, mainChartWorkingDir, path.ChartCRDDir, c.WorkingDir, c.CRDChartOptions.CRDDirectory); err != nil {
return fmt.Errorf("encountered error while trying to copy CRDs from %s to %s: %s", mainChartWorkingDir, c.WorkingDir, err)
if c.Upstream == nil {
if err := helm.DeleteCRDsFromChart(pkgFs, mainChartWorkingDir); err != nil {
return fmt.Errorf("encountered error while trying to delete CRDs from main chart: %s", err)
}
}
if c.CRDChartOptions.UseTarArchive {
logrus.Info("CRDs already archived, need to unarchive to apply to the main chart")
if err := filesystem.UnarchiveTgz(pkgFs, filepath.Join(c.WorkingDir, path.ChartExtraFileDir, path.ChartCRDTgzFilename), "crds", filepath.Join(c.WorkingDir, c.CRDChartOptions.CRDDirectory), false); err != nil {
return fmt.Errorf("encountered error while trying to unarchive CRD files from %s: %s", filepath.Join(c.WorkingDir, "files", path.ChartCRDTgzFilename), err)
}
defer helm.DeleteCRDsFromChart(pkgFs, c.WorkingDir)
}
if c.CRDChartOptions.AddCRDValidationToMainChart {
if err := AddCRDValidationToChart(pkgFs, mainChartWorkingDir, c.WorkingDir, c.CRDChartOptions.CRDDirectory); err != nil {
return fmt.Errorf("encountered error while trying to add CRD validation to %s based on CRDs in %s: %s", mainChartWorkingDir, c.WorkingDir, err)
}
}
if c.CRDChartOptions.UseTarArchive {
if err := helm.ArchiveCRDs(pkgFs, mainChartWorkingDir, path.ChartCRDDir, c.WorkingDir, path.ChartExtraFileDir); err != nil {
return fmt.Errorf("encountered error while trying to bundle and compress CRD files from the main chart: %s", err)
}

if err := helm.DeleteCRDsFromChart(pkgFs, c.WorkingDir); err != nil {
return fmt.Errorf("encountered error while trying to delete CRDs from crd chart: %s", err)
}
}
if err := helm.DeleteCRDsFromChart(pkgFs, mainChartWorkingDir); err != nil {
return fmt.Errorf("encountered error while trying to delete CRDs from main chart: %s", err)
}
Expand All @@ -87,14 +88,16 @@ func (c *AdditionalChart) RevertMainChanges(pkgFs billy.Filesystem) error {
if err != nil {
return fmt.Errorf("encountered error while trying to get the main chart's working directory: %s", err)
}
if c.CRDChartOptions.UseTarArchive {
if err := filesystem.UnarchiveTgz(pkgFs, filepath.Join(c.WorkingDir, path.ChartExtraFileDir, path.ChartCRDTgzFilename), "", filepath.Join(c.WorkingDir, c.CRDChartOptions.CRDDirectory), false); err != nil {
return fmt.Errorf("encountered error while trying to unarchive CRD files from %s: %s", filepath.Join(c.WorkingDir, "files", path.ChartCRDTgzFilename), err)
if c.Upstream == nil {
if c.CRDChartOptions.UseTarArchive {
if err := filesystem.UnarchiveTgz(pkgFs, filepath.Join(c.WorkingDir, path.ChartExtraFileDir, path.ChartCRDTgzFilename), "crds", filepath.Join(c.WorkingDir, c.CRDChartOptions.CRDDirectory), false); err != nil {
return fmt.Errorf("encountered error while trying to unarchive CRD files from %s: %s", filepath.Join(c.WorkingDir, "files", path.ChartCRDTgzFilename), err)
}
}
// copy CRD files from packages/<package>/<workingDir>/<crdDirectory>/ back to packages/<package>/crds/
if err := helm.CopyCRDsFromChart(pkgFs, c.WorkingDir, c.CRDChartOptions.CRDDirectory, mainChartWorkingDir, path.ChartCRDDir); err != nil {
return fmt.Errorf("encountered error while trying to copy CRDs from %s to %s: %s", c.WorkingDir, mainChartWorkingDir, err)
}
}
// copy CRD files from packages/<package>/<workingDir>/<crdDirectory>/ back to packages/<package>/crds/
if err := helm.CopyCRDsFromChart(pkgFs, c.WorkingDir, c.CRDChartOptions.CRDDirectory, mainChartWorkingDir, path.ChartCRDDir); err != nil {
return fmt.Errorf("encountered error while trying to copy CRDs from %s to %s: %s", c.WorkingDir, mainChartWorkingDir, err)
}
if c.CRDChartOptions.AddCRDValidationToMainChart {
if err := RemoveCRDValidationFromChart(pkgFs, mainChartWorkingDir); err != nil {
Expand All @@ -104,6 +107,49 @@ func (c *AdditionalChart) RevertMainChanges(pkgFs billy.Filesystem) error {
return nil
}

func (c *AdditionalChart) prepareCrdChart(rootFs, pkgFs billy.Filesystem, mainChartUpstreamVersion *string) error {
if err := GenerateCRDChartFromTemplate(pkgFs, c.WorkingDir, filepath.Join(path.PackageTemplatesDir, c.CRDChartOptions.TemplateDirectory), c.CRDChartOptions.CRDDirectory); err != nil {
return fmt.Errorf("encountered error while trying to generate CRD chart from template at %s: %s", c.CRDChartOptions.TemplateDirectory, err)
}

c.upstreamChartVersion = mainChartUpstreamVersion
mainChartWorkingDir, err := c.getMainChartWorkingDir(pkgFs)
if err != nil {
return fmt.Errorf("encountered error while trying to get the main chart's working directory: %s", err)
}

if c.Upstream != nil {
logrus.Infof("pulling CRD upstream")
u := *c.Upstream
if err := u.Pull(rootFs, pkgFs, filepath.Join(c.WorkingDir, c.CRDChartOptions.CRDDirectory)); err != nil {
return fmt.Errorf("encountered error while trying to pull upstream into %s: %s", mainChartWorkingDir, err)
}
} else {
exists, err := filesystem.PathExists(pkgFs, filepath.Join(mainChartWorkingDir, path.ChartCRDDir))
if err != nil {
return fmt.Errorf("encountered error while trying to check if %s exists: %s", filepath.Join(mainChartWorkingDir, path.ChartCRDDir), err)
}
if !exists {
return fmt.Errorf("unable to prepare a CRD chart since there are no CRDs at %s", filepath.Join(mainChartWorkingDir, path.ChartCRDDir))
}
if err := helm.CopyCRDsFromChart(pkgFs, mainChartWorkingDir, path.ChartCRDDir, c.WorkingDir, c.CRDChartOptions.CRDDirectory); err != nil {
return fmt.Errorf("encountered error while trying to copy CRDs from %s to %s: %s", mainChartWorkingDir, c.WorkingDir, err)
}
}

if c.CRDChartOptions.UseTarArchive {
if err := helm.ArchiveCRDs(pkgFs, c.WorkingDir, c.CRDChartOptions.CRDDirectory, c.WorkingDir, path.ChartExtraFileDir); err != nil {
return fmt.Errorf("encountered error while trying to bundle and compress CRD files from the main chart: %s", err)
}

if err := helm.DeleteCRDsFromChart(pkgFs, c.WorkingDir); err != nil {
return fmt.Errorf("encountered error while trying to delete CRDs from crd chart: %s", err)
}
}

return nil
}

// Prepare pulls in a package based on the spec to the local git repository
func (c *AdditionalChart) Prepare(rootFs, pkgFs billy.Filesystem, mainChartUpstreamVersion *string) error {
if c.CRDChartOptions == nil && c.Upstream == nil {
Expand All @@ -122,27 +168,8 @@ func (c *AdditionalChart) Prepare(rootFs, pkgFs billy.Filesystem, mainChartUpstr
return fmt.Errorf("encountered error while trying to clean up %s before preparing: %s", c.WorkingDir, err)
}
if c.CRDChartOptions != nil {
c.upstreamChartVersion = mainChartUpstreamVersion
mainChartWorkingDir, err := c.getMainChartWorkingDir(pkgFs)
if err != nil {
return fmt.Errorf("encountered error while trying to get the main chart's working directory: %s", err)
}
if c.Upstream != nil {
logrus.Infof("pulling CRD upstream")
u := *c.Upstream
if err := u.Pull(rootFs, pkgFs, filepath.Join(mainChartWorkingDir, path.ChartCRDDir)); err != nil {
return fmt.Errorf("encountered error while trying to pull upstream into %s: %s", mainChartWorkingDir, err)
}
}
exists, err := filesystem.PathExists(pkgFs, filepath.Join(mainChartWorkingDir, path.ChartCRDDir))
if err != nil {
return fmt.Errorf("encountered error while trying to check if %s exists: %s", filepath.Join(mainChartWorkingDir, path.ChartCRDDir), err)
}
if !exists {
return fmt.Errorf("unable to prepare a CRD chart since there are no CRDs at %s", filepath.Join(mainChartWorkingDir, path.ChartCRDDir))
}
if err := GenerateCRDChartFromTemplate(pkgFs, c.WorkingDir, filepath.Join(path.PackageTemplatesDir, c.CRDChartOptions.TemplateDirectory), c.CRDChartOptions.CRDDirectory); err != nil {
return fmt.Errorf("encountered error while trying to generate CRD chart from template at %s: %s", c.CRDChartOptions.TemplateDirectory, err)
if err := c.prepareCrdChart(rootFs, pkgFs, mainChartUpstreamVersion); err != nil {
return fmt.Errorf("encountered error while trying to prepare CRD chart: %s", err)
}
} else {
u := *c.Upstream
Expand Down
Loading