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