mirror of https://github.com/helm/helm
Merge changes from #172.
parent
3cca3065af
commit
17f22d777f
@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package registry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/google/go-github/github"
|
||||||
|
"github.com/kubernetes/deployment-manager/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RegistryProvider returns factories for creating registry clients.
|
||||||
|
type RegistryProvider interface {
|
||||||
|
GetRegistryByURL(URL string) (Registry, error)
|
||||||
|
GetRegistryByName(registryName string) (Registry, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewDefaultRegistryProvider() RegistryProvider {
|
||||||
|
registries := make(map[string]Registry)
|
||||||
|
rs := NewInmemRegistryService()
|
||||||
|
return &DefaultRegistryProvider{registries: registries, rs: rs}
|
||||||
|
}
|
||||||
|
|
||||||
|
type DefaultRegistryProvider struct {
|
||||||
|
sync.RWMutex
|
||||||
|
registries map[string]Registry
|
||||||
|
rs RegistryService
|
||||||
|
}
|
||||||
|
|
||||||
|
func (drp *DefaultRegistryProvider) GetRegistryByURL(URL string) (Registry, error) {
|
||||||
|
drp.RLock()
|
||||||
|
defer drp.RUnlock()
|
||||||
|
|
||||||
|
ghr := drp.findRegistryByURL(URL)
|
||||||
|
if ghr == nil {
|
||||||
|
cr, err := drp.rs.GetByURL(URL)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
ghr, err := drp.getGithubRegistry(cr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
drp.registries[ghr.GetRegistryName()] = ghr
|
||||||
|
}
|
||||||
|
|
||||||
|
return ghr, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (drp *DefaultRegistryProvider) findRegistryByURL(URL string) Registry {
|
||||||
|
for _, ghr := range drp.registries {
|
||||||
|
if strings.HasPrefix(URL, ghr.GetRegistryURL()) {
|
||||||
|
return ghr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (drp *DefaultRegistryProvider) GetRegistryByName(registryName string) (Registry, error) {
|
||||||
|
drp.RLock()
|
||||||
|
defer drp.RUnlock()
|
||||||
|
|
||||||
|
ghr, ok := drp.registries[registryName]
|
||||||
|
if !ok {
|
||||||
|
cr, err := drp.rs.Get(registryName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
ghr, err := drp.getGithubRegistry(cr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
drp.registries[ghr.GetRegistryName()] = ghr
|
||||||
|
}
|
||||||
|
|
||||||
|
return ghr, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (drp *DefaultRegistryProvider) getGithubRegistry(cr *common.Registry) (Registry, error) {
|
||||||
|
// TODO(jackgr): Take owner and repository from cr instead of hard wiring
|
||||||
|
if cr.Type == common.GithubRegistryType {
|
||||||
|
switch cr.Format {
|
||||||
|
case common.UnversionedRegistry:
|
||||||
|
return NewGithubPackageRegistry("helm", "charts", github.NewClient(nil)), nil
|
||||||
|
case common.VersionedRegistry:
|
||||||
|
return NewGithubRegistry("kubernetes", "application-dm-templates", "", github.NewClient(nil)), nil
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("unknown registry format: %s", cr.Format)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, fmt.Errorf("unknown registry type: %s", cr.Type)
|
||||||
|
}
|
@ -1,55 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2015 The Kubernetes Authors All rights reserved.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package registry
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/google/go-github/github"
|
|
||||||
"github.com/kubernetes/deployment-manager/common"
|
|
||||||
)
|
|
||||||
|
|
||||||
// RegistryProvider returns factories for creating registries for a given RegistryType.
|
|
||||||
type RegistryProvider interface {
|
|
||||||
GetRegistry(prefix string) (Registry, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewDefaultRegistryProvider() RegistryProvider {
|
|
||||||
rs := NewInmemRepositoryService()
|
|
||||||
return &DefaultRegistryProvider{rs: rs}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
type DefaultRegistryProvider struct {
|
|
||||||
rs RegistryService
|
|
||||||
}
|
|
||||||
|
|
||||||
func (drp *DefaultRegistryProvider) GetRegistry(URL string) (Registry, error) {
|
|
||||||
r, err := drp.rs.GetByURL(URL)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if r.Type == common.Github {
|
|
||||||
if r.Format == common.UnversionedRegistry {
|
|
||||||
return NewGithubPackageRegistry("helm", "charts", github.NewClient(nil)), nil
|
|
||||||
}
|
|
||||||
if r.Format == common.VersionedRegistry {
|
|
||||||
return NewGithubRegistry("kubernetes", "application-dm-templates", "", github.NewClient(nil)), nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil, fmt.Errorf("cannot find registry backing url %s", URL)
|
|
||||||
}
|
|
@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 The Kubernetes Authors All rights reserved.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package registry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SemVer struct {
|
||||||
|
Major uint
|
||||||
|
Minor uint
|
||||||
|
Patch uint
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSemVer(version string) (*SemVer, error) {
|
||||||
|
result := &SemVer{}
|
||||||
|
parts := strings.SplitN(version, ".", 3)
|
||||||
|
if len(parts) > 3 {
|
||||||
|
return nil, fmt.Errorf("invalid semantic version: %s", version)
|
||||||
|
}
|
||||||
|
|
||||||
|
major, err := strconv.ParseUint(parts[0], 10, 0)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("invalid semantic version: %s", version)
|
||||||
|
}
|
||||||
|
|
||||||
|
result.Major = uint(major)
|
||||||
|
if len(parts) < 3 {
|
||||||
|
if len(parts) < 2 {
|
||||||
|
if len(parts) < 1 {
|
||||||
|
return nil, fmt.Errorf("invalid semantic version: %s", version)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
minor, err := strconv.ParseUint(parts[1], 10, 0)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("invalid semantic version: %s", version)
|
||||||
|
}
|
||||||
|
|
||||||
|
result.Minor = uint(minor)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
patch, err := strconv.ParseUint(parts[2], 10, 0)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("invalid semantic version: %s", version)
|
||||||
|
}
|
||||||
|
|
||||||
|
result.Patch = uint(patch)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *SemVer) String() string {
|
||||||
|
result := strconv.Itoa(int(s.Major))
|
||||||
|
if s.Minor != 0 || s.Patch != 0 {
|
||||||
|
result = result + "." + strconv.Itoa(int(s.Minor))
|
||||||
|
}
|
||||||
|
|
||||||
|
if s.Patch != 0 {
|
||||||
|
result = result + "." + strconv.Itoa(int(s.Patch))
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
Loading…
Reference in new issue