Dynamic Runtime source for k8s with github packages (#1252)

* Dynamic Runtime source for k8s

* Still check for source

* Replace / with - for k8s service names

* Simplify sourceForName function
This commit is contained in:
ben-toogood 2020-02-24 17:47:47 +00:00 committed by GitHub
parent ffdf986aac
commit 5e8d5834eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 6 deletions

View File

@ -270,9 +270,9 @@ func (k *kubernetes) Create(s *runtime.Service, opts ...runtime.CreateOption) er
if len(options.Type) == 0 {
options.Type = k.options.Type
}
if len(k.options.Source) > 0 {
s.Source = k.options.Source
}
// determine the full source for this service
options.Source = k.sourceForService(s.Name)
service := newService(s, options)
@ -329,7 +329,8 @@ func (k *kubernetes) List() ([]*runtime.Service, error) {
func (k *kubernetes) Update(s *runtime.Service) error {
// create new kubernetes micro service
service := newService(s, runtime.CreateOptions{
Type: k.options.Type,
Type: k.options.Type,
Source: k.sourceForService(s.Name),
})
// update build time annotation
@ -432,3 +433,15 @@ func NewRuntime(opts ...runtime.Option) runtime.Runtime {
client: client,
}
}
// sourceForService determines the nested package name for github
// e.g src: docker.pkg.github.com/micro/services an srv: users/api
// would become docker.pkg.github.com/micro/services/users-api
func (k *kubernetes) sourceForService(name string) string {
if !strings.HasPrefix(k.options.Source, "docker.pkg.github.com") {
return k.options.Source
}
formattedName := strings.ReplaceAll(name, "/", "-")
return fmt.Sprintf("%v/%v", k.options.Source, formattedName)
}

View File

@ -34,9 +34,9 @@ func newService(s *runtime.Service, c runtime.CreateOptions) *service {
kservice := client.NewService(name, version, c.Type)
kdeploy := client.NewDeployment(name, version, c.Type)
if len(s.Source) > 0 {
if len(c.Source) > 0 {
for i := range kdeploy.Spec.Template.PodSpec.Containers {
kdeploy.Spec.Template.PodSpec.Containers[i].Image = s.Source
kdeploy.Spec.Template.PodSpec.Containers[i].Image = c.Source
kdeploy.Spec.Template.PodSpec.Containers[i].Command = []string{}
kdeploy.Spec.Template.PodSpec.Containers[i].Args = []string{name}
}

View File

@ -53,6 +53,8 @@ type CreateOptions struct {
Type string
// Retries before failing deploy
Retries int
// Source of the service
Source string
}
// ReadOptions queries runtime services
@ -72,6 +74,13 @@ func CreateType(t string) CreateOption {
}
}
// CreateSource sets the source of service to create
func CreateSource(t string) CreateOption {
return func(o *CreateOptions) {
o.Source = t
}
}
// WithCommand specifies the command to execute
func WithCommand(args ...string) CreateOption {
return func(o *CreateOptions) {

View File

@ -35,6 +35,11 @@ func (s *svc) Create(svc *runtime.Service, opts ...runtime.CreateOption) error {
o(&options)
}
// set the default source from MICRO_RUNTIME_SOURCE
if len(svc.Source) == 0 {
svc.Source = s.options.Source
}
// runtime service create request
req := &pb.CreateRequest{
Service: &pb.Service{

View File

@ -91,6 +91,8 @@ func CertsFromPEM(pemCerts []byte) ([]*x509.Certificate, error) {
func Format(v string) string {
// to lower case
v = strings.ToLower(v)
// / to dashes
v = strings.ReplaceAll(v, "/", "-")
// dots to dashes
v = strings.ReplaceAll(v, ".", "-")
// limit to 253 chars