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. // string or pair of child/parent sublist items.
ImportValues []interface{} `json:"import-values"` ImportValues []interface{} `json:"import-values"`
// Alias usable alias to be used for the chart // Alias usable alias to be used for the chart
Alias []string `json:"alias"` Alias string `json:"alias"`
} }
// ErrNoRequirementsFile to detect error condition // 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 var chartFound chart.Chart
for _, existingChart := range charts { for _, existingChart := range charts {
if existingChart == nil { if existingChart == nil {
@ -227,17 +227,17 @@ func updateChartDependencyAlias(charts []*chart.Chart, dependentChart, aliasChar
if existingChart.Metadata == nil { if existingChart.Metadata == nil {
continue continue
} }
if existingChart.Metadata.Name != dependentChart { if existingChart.Metadata.Name != aliasChart.Name {
continue continue
} }
if firstAlias { if existingChart.Metadata.Version != aliasChart.Version {
existingChart.Metadata.Name = aliasChart continue
return nil
} }
chartFound = *existingChart chartFound = *existingChart
newMetadata := *existingChart.Metadata newMetadata := *existingChart.Metadata
newMetadata.Name = aliasChart if aliasChart.Alias != "" {
newMetadata.Name = aliasChart.Alias
}
chartFound.Metadata = &newMetadata chartFound.Metadata = &newMetadata
return &chartFound return &chartFound
} }
@ -257,25 +257,16 @@ func ProcessRequirementsEnabled(c *chart.Chart, v *chart.Config) error {
return nil return nil
} }
var chartDependencies []*chart.Chart
for _, req := range reqs.Dependencies { for _, req := range reqs.Dependencies {
var firstAlias = true if chartDependency := getAliasDependency(c.Dependencies, req); chartDependency != nil {
var dependentChartName = req.Name chartDependencies = append(chartDependencies, chartDependency)
for _, alias := range req.Alias { }
aliasDependency := updateChartDependencyAlias(c.Dependencies, dependentChartName, alias, firstAlias) if req.Alias != "" {
if firstAlias { req.Name = req.Alias
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
} }
} }
c.Dependencies = chartDependencies
// set all to true // set all to true
for _, lr := range reqs.Dependencies { 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") c, err := Load("testdata/frobnitz")
if err != nil { if err != nil {
t.Fatalf("Failed to load testdata: %s", err) t.Fatalf("Failed to load testdata: %s", err)
} }
req, err := LoadRequirements(c)
if aliasChart := updateChartDependencyAlias(c.Dependencies, "mariners", "another-mariner", false); aliasChart != nil { if err != nil {
t.Fatalf("expected no chart but got %s", aliasChart.Metadata.Name) 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 { if aliasChart == nil {
t.Fatal("Failed to find dependent chart") t.Fatalf("Failed to get dependency chart for alias %s", req.Dependencies[0].Name)
}
if aliasChart.Metadata.Name != "another-mariner" {
t.Fatal(`Failed to update chart-name for alias "dependent chart`)
} }
if req.Dependencies[0].Alias != "" {
//Testing single-alias update, first update and then try same with non-first alias, we should not be able to find chart if aliasChart.Metadata.Name != req.Dependencies[0].Alias {
if aliasChart := updateChartDependencyAlias(c.Dependencies, "mariner", "another-mariner", true); aliasChart != nil { t.Fatalf("Dependency chart name should be %s but got %s", req.Dependencies[0].Alias, aliasChart.Metadata.Name)
t.Fatalf("expected no chart but got %s", 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) t.Fatalf("expected no chart but got %s", aliasChart.Metadata.Name)
} }
} }
func TestDependentChartAliases(t *testing.T) { func TestDependentChartAliases(t *testing.T) {
@ -374,15 +378,15 @@ func TestDependentChartAliases(t *testing.T) {
t.Fatalf("Cannot load requirements for test chart, %v", err) t.Fatalf("Cannot load requirements for test chart, %v", err)
} }
var expectedDependencyCharts int // var expectedDependencyCharts int
for _, reqmt := range reqmts.Dependencies { // for _, reqmt := range reqmts.Dependencies {
expectedDependencyCharts++ // expectedDependencyCharts++
if len(reqmt.Alias) >= 0 { // if len(reqmt.Alias) >= 0 {
expectedDependencyCharts += len(reqmt.Alias) // expectedDependencyCharts += len(reqmt.Alias)
} // }
} // }
if len(c.Dependencies) != expectedDependencyCharts-1 { if len(c.Dependencies) != len(reqmts.Dependencies) {
t.Fatalf("Expected number of chart dependencies %d, but got %d", expectedDependencyCharts-1, len(c.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 - name: mariner
version: "4.3.2" version: "4.3.2"
repository: https://example.com/charts repository: https://example.com/charts
alias: alias: mariners2
- mariners1 - name: mariner
- mariners2 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) { func TestHashReq(t *testing.T) {
expect := "sha256:917e251ddba291096889f81eb7de713ab4e1afbbb07c576dfd7d66ba9300b12b" expect := "sha256:45b06fcc4496c705bf3d634f8a2ff84e6a6f0bdcaf010614b8886572d1e52b99"
req := &chartutil.Requirements{ req := &chartutil.Requirements{
Dependencies: []*chartutil.Dependency{ Dependencies: []*chartutil.Dependency{
{Name: "alpine", Version: "0.1.0", Repository: "http://localhost:8879/charts"}, {Name: "alpine", Version: "0.1.0", Repository: "http://localhost:8879/charts"},

Loading…
Cancel
Save