Updated code to read requirements.yaml as per following structure

```
- name: <dependency-chart-name>
  alias: <alias-name-to-be-used>
  version: <dependency-chart-version>
  repository: <dependency-chart-version>
```
pull/2534/head
Sushil Kumar 8 years ago
parent 541d052202
commit 716be14ad3

@ -66,7 +66,7 @@ type Dependency struct {
// string or pair of child/parent sublist items.
ImportValues []interface{} `json:"import-values"`
// Alias usable alias to be used for the chart
Alias []string `json:"alias"`
Alias string `json:"alias"`
}
// ErrNoRequirementsFile to detect error condition
@ -218,7 +218,7 @@ func ProcessRequirementsTags(reqs *Requirements, cvals Values) {
}
func updateChartDependencyAlias(charts []*chart.Chart, dependentChart, aliasChart string, firstAlias bool) *chart.Chart {
func getAliasDependency(charts []*chart.Chart, aliasChart *Dependency) *chart.Chart {
var chartFound chart.Chart
for _, existingChart := range charts {
if existingChart == nil {
@ -227,17 +227,17 @@ func updateChartDependencyAlias(charts []*chart.Chart, dependentChart, aliasChar
if existingChart.Metadata == nil {
continue
}
if existingChart.Metadata.Name != dependentChart {
if existingChart.Metadata.Name != aliasChart.Name {
continue
}
if firstAlias {
existingChart.Metadata.Name = aliasChart
return nil
if existingChart.Metadata.Version != aliasChart.Version {
continue
}
chartFound = *existingChart
newMetadata := *existingChart.Metadata
newMetadata.Name = aliasChart
if aliasChart.Alias != "" {
newMetadata.Name = aliasChart.Alias
}
chartFound.Metadata = &newMetadata
return &chartFound
}
@ -257,25 +257,16 @@ func ProcessRequirementsEnabled(c *chart.Chart, v *chart.Config) error {
return nil
}
var chartDependencies []*chart.Chart
for _, req := range reqs.Dependencies {
var firstAlias = true
var dependentChartName = req.Name
for _, alias := range req.Alias {
aliasDependency := updateChartDependencyAlias(c.Dependencies, dependentChartName, alias, firstAlias)
if firstAlias {
dependentChartName = alias
firstAlias = false
continue
}
if aliasDependency == nil {
break
}
c.Dependencies = append(c.Dependencies, aliasDependency)
req.Name = alias
reqs.Dependencies = append(reqs.Dependencies, req)
req.Name = dependentChartName
if chartDependency := getAliasDependency(c.Dependencies, req); chartDependency != nil {
chartDependencies = append(chartDependencies, chartDependency)
}
if req.Alias != "" {
req.Name = req.Alias
}
}
c.Dependencies = chartDependencies
// set all to true
for _, lr := range reqs.Dependencies {

@ -321,33 +321,37 @@ func verifyRequirementsImportValues(t *testing.T, c *chart.Chart, v *chart.Confi
}
}
func TestUpdateChartDependencyAlias(t *testing.T) {
func TestGetAliasDependency(t *testing.T) {
c, err := Load("testdata/frobnitz")
if err != nil {
t.Fatalf("Failed to load testdata: %s", err)
}
if aliasChart := updateChartDependencyAlias(c.Dependencies, "mariners", "another-mariner", false); aliasChart != nil {
t.Fatalf("expected no chart but got %s", aliasChart.Metadata.Name)
req, err := LoadRequirements(c)
if err != nil {
t.Fatalf("Failed to load requirement for testdata: %s", err)
}
if len(req.Dependencies) == 0 {
t.Fatalf("There are no requirements to test")
}
aliasChart := updateChartDependencyAlias(c.Dependencies, "mariner", "another-mariner", false)
// Success case
aliasChart := getAliasDependency(c.Dependencies, req.Dependencies[0])
if aliasChart == nil {
t.Fatal("Failed to find dependent chart")
}
if aliasChart.Metadata.Name != "another-mariner" {
t.Fatal(`Failed to update chart-name for alias "dependent chart`)
t.Fatalf("Failed to get dependency chart for alias %s", req.Dependencies[0].Name)
}
//Testing single-alias update, first update and then try same with non-first alias, we should not be able to find chart
if aliasChart := updateChartDependencyAlias(c.Dependencies, "mariner", "another-mariner", true); aliasChart != nil {
t.Fatalf("expected no chart but got %s", aliasChart.Metadata.Name)
if req.Dependencies[0].Alias != "" {
if aliasChart.Metadata.Name != req.Dependencies[0].Alias {
t.Fatalf("Dependency chart name should be %s but got %s", req.Dependencies[0].Alias, aliasChart.Metadata.Name)
}
} else if aliasChart.Metadata.Name != req.Dependencies[0].Name {
t.Fatalf("Dependency chart name should be %s but got %s", req.Dependencies[0].Name, aliasChart.Metadata.Name)
}
if aliasChart := updateChartDependencyAlias(c.Dependencies, "mariner", "another-mariner", false); aliasChart != nil {
// Failure case
req.Dependencies[0].Name = "something-else"
if aliasChart := getAliasDependency(c.Dependencies, req.Dependencies[0]); aliasChart != nil {
t.Fatalf("expected no chart but got %s", aliasChart.Metadata.Name)
}
}
func TestDependentChartAliases(t *testing.T) {
@ -374,15 +378,15 @@ func TestDependentChartAliases(t *testing.T) {
t.Fatalf("Cannot load requirements for test chart, %v", err)
}
var expectedDependencyCharts int
for _, reqmt := range reqmts.Dependencies {
expectedDependencyCharts++
if len(reqmt.Alias) >= 0 {
expectedDependencyCharts += len(reqmt.Alias)
}
}
if len(c.Dependencies) != expectedDependencyCharts-1 {
t.Fatalf("Expected number of chart dependencies %d, but got %d", expectedDependencyCharts-1, len(c.Dependencies))
// var expectedDependencyCharts int
// for _, reqmt := range reqmts.Dependencies {
// expectedDependencyCharts++
// if len(reqmt.Alias) >= 0 {
// expectedDependencyCharts += len(reqmt.Alias)
// }
// }
if len(c.Dependencies) != len(reqmts.Dependencies) {
t.Fatalf("Expected number of chart dependencies %d, but got %d", len(reqmts.Dependencies), len(c.Dependencies))
}
}

@ -5,6 +5,8 @@ dependencies:
- name: mariner
version: "4.3.2"
repository: https://example.com/charts
alias:
- mariners1
- mariners2
alias: mariners2
- name: mariner
version: "4.3.2"
repository: https://example.com/charts
alias: mariners1

@ -146,7 +146,7 @@ func TestResolve(t *testing.T) {
}
func TestHashReq(t *testing.T) {
expect := "sha256:917e251ddba291096889f81eb7de713ab4e1afbbb07c576dfd7d66ba9300b12b"
expect := "sha256:45b06fcc4496c705bf3d634f8a2ff84e6a6f0bdcaf010614b8886572d1e52b99"
req := &chartutil.Requirements{
Dependencies: []*chartutil.Dependency{
{Name: "alpine", Version: "0.1.0", Repository: "http://localhost:8879/charts"},

Loading…
Cancel
Save