118 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Package runtime is a service runtime manager
 | |
| package runtime
 | |
| 
 | |
| import "fmt"
 | |
| 
 | |
| const (
 | |
| 	TypeNamespace     = "namespace"
 | |
| 	TypeNetworkPolicy = "networkpolicy"
 | |
| 	TypeService       = "service"
 | |
| )
 | |
| 
 | |
| // Resource represents any resource handled by runtime
 | |
| type Resource interface {
 | |
| 	String() string
 | |
| 	Type() string
 | |
| }
 | |
| 
 | |
| // Namespace represents a logical namespace for organising resources
 | |
| type Namespace struct {
 | |
| 	// Name of the namespace
 | |
| 	Name string
 | |
| }
 | |
| 
 | |
| // NewNamespace mints a new namespace
 | |
| func NewNamespace(name string) (*Namespace, error) {
 | |
| 	if name == "" {
 | |
| 		return nil, ErrInvalidResource
 | |
| 	}
 | |
| 	return &Namespace{
 | |
| 		Name: name,
 | |
| 	}, nil
 | |
| }
 | |
| 
 | |
| // String implements Resource
 | |
| func (r *Namespace) String() string {
 | |
| 	return r.Name
 | |
| }
 | |
| 
 | |
| // Type implements Resource
 | |
| func (*Namespace) Type() string {
 | |
| 	return TypeNamespace
 | |
| }
 | |
| 
 | |
| // NetworkPolicy represents an ACL of label pairs allowing ignress to a namespace
 | |
| type NetworkPolicy struct {
 | |
| 	// The labels allowed ingress by this policy
 | |
| 	AllowedLabels map[string]string
 | |
| 	// Name of the network policy
 | |
| 	Name string
 | |
| 	// Namespace the network policy belongs to
 | |
| 	Namespace string
 | |
| }
 | |
| 
 | |
| // NewNetworkPolicy mints a new networkpolicy
 | |
| func NewNetworkPolicy(name, namespace string, allowedLabels map[string]string) (*NetworkPolicy, error) {
 | |
| 	if name == "" || namespace == "" {
 | |
| 		return nil, ErrInvalidResource
 | |
| 	}
 | |
| 	if allowedLabels == nil {
 | |
| 		allowedLabels = map[string]string{
 | |
| 			"origin": "micro",
 | |
| 		}
 | |
| 	}
 | |
| 	return &NetworkPolicy{
 | |
| 		AllowedLabels: allowedLabels,
 | |
| 		Name:          name,
 | |
| 		Namespace:     namespace,
 | |
| 	}, nil
 | |
| }
 | |
| 
 | |
| // String implements Resource
 | |
| func (r *NetworkPolicy) String() string {
 | |
| 	return fmt.Sprintf("%s.%s", r.Namespace, r.Name)
 | |
| }
 | |
| 
 | |
| // Type implements Resource
 | |
| func (*NetworkPolicy) Type() string {
 | |
| 	return TypeNetworkPolicy
 | |
| }
 | |
| 
 | |
| // Service represents a Micro service running within a namespace
 | |
| type Service struct {
 | |
| 	// Name of the service
 | |
| 	Name string
 | |
| 	// Version of the service
 | |
| 	Version string
 | |
| 	// url location of source
 | |
| 	Source string
 | |
| 	// Metadata stores metadata
 | |
| 	Metadata map[string]string
 | |
| 	// Status of the service
 | |
| 	Status ServiceStatus
 | |
| }
 | |
| 
 | |
| // NewService mints a new service
 | |
| func NewService(name, version string) (*Service, error) {
 | |
| 	if name == "" {
 | |
| 		return nil, ErrInvalidResource
 | |
| 	}
 | |
| 	if version == "" {
 | |
| 		version = "latest"
 | |
| 	}
 | |
| 	return &Service{
 | |
| 		Name:    name,
 | |
| 		Version: version,
 | |
| 	}, nil
 | |
| }
 | |
| 
 | |
| // String implements Resource
 | |
| func (r *Service) String() string {
 | |
| 	return fmt.Sprintf("service://%s@%s:%s", r.Metadata["namespace"], r.Name, r.Version)
 | |
| }
 | |
| 
 | |
| // Type implements Resource
 | |
| func (*Service) Type() string {
 | |
| 	return TypeService
 | |
| }
 |