mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 02:03:20 -04:00 
			
		
		
		
	
		
			
	
	
		
			118 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			118 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package k8sclient
 | ||
|  | 
 | ||
|  | import (
 | ||
|  | //    "fmt"
 | ||
|  |     "net/url"
 | ||
|  | )
 | ||
|  | 
 | ||
|  | // API strings
 | ||
|  | const (
 | ||
|  |     apiBase       = "/api/v1"
 | ||
|  |     apiNamespaces = "/namespaces"
 | ||
|  |     apiServices   = "/services"
 | ||
|  | )
 | ||
|  | 
 | ||
|  | // Defaults
 | ||
|  | const (
 | ||
|  |     defaultBaseUrl = "http://localhost:8080"
 | ||
|  | )
 | ||
|  | 
 | ||
|  | 
 | ||
|  | type K8sConnector struct {
 | ||
|  |     baseUrl string
 | ||
|  | }
 | ||
|  | 
 | ||
|  | func (c *K8sConnector) SetBaseUrl(u string) error {
 | ||
|  |     validUrl, error := url.Parse(u)
 | ||
|  | 
 | ||
|  |     if error != nil {
 | ||
|  |         return error
 | ||
|  |     }
 | ||
|  |     c.baseUrl = validUrl.String()
 | ||
|  | 
 | ||
|  |     return nil
 | ||
|  | }
 | ||
|  | 
 | ||
|  | func (c *K8sConnector) GetBaseUrl() string {
 | ||
|  |     return c.baseUrl
 | ||
|  | }
 | ||
|  | 
 | ||
|  | 
 | ||
|  | func (c *K8sConnector) GetResourceList() *ResourceList {
 | ||
|  |     resources := new(ResourceList)
 | ||
|  |     
 | ||
|  |     error := getJson((c.baseUrl + apiBase), resources)
 | ||
|  |     if error != nil {
 | ||
|  |         return nil
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     return resources
 | ||
|  | }
 | ||
|  | 
 | ||
|  | 
 | ||
|  | func (c *K8sConnector) GetNamespaceList() *NamespaceList {
 | ||
|  |     namespaces := new(NamespaceList)
 | ||
|  | 
 | ||
|  |     error := getJson((c.baseUrl + apiBase + apiNamespaces), namespaces)
 | ||
|  |     if error != nil {
 | ||
|  |         return nil
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     return namespaces
 | ||
|  | }
 | ||
|  | 
 | ||
|  | 
 | ||
|  | func (c *K8sConnector) GetServiceList() *ServiceList {
 | ||
|  |     services := new(ServiceList)
 | ||
|  | 
 | ||
|  |     error := getJson((c.baseUrl + apiBase + apiServices), services)
 | ||
|  |     if error != nil {
 | ||
|  |         return nil
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     return services
 | ||
|  | }
 | ||
|  | 
 | ||
|  | 
 | ||
|  | func (c *K8sConnector) GetServicesByNamespace() map[string][]ServiceItem {
 | ||
|  |      // GetServicesByNamespace returns a map of namespacename :: [ kubernetesServiceItem ]
 | ||
|  | 
 | ||
|  |     items := make(map[string][]ServiceItem)
 | ||
|  | 
 | ||
|  |     k8sServiceList := c.GetServiceList()
 | ||
|  |     k8sItemList := k8sServiceList.Items
 | ||
|  | 
 | ||
|  |     for _, i := range k8sItemList {
 | ||
|  |         namespace := i.Metadata.Namespace
 | ||
|  |         items[namespace] = append(items[namespace], i)
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     return items
 | ||
|  | }
 | ||
|  | 
 | ||
|  | 
 | ||
|  | func (c *K8sConnector) GetServiceItemInNamespace(namespace string, servicename string) *ServiceItem {
 | ||
|  |     // GetServiceItemInNamespace returns the ServiceItem that matches servicename in the namespace
 | ||
|  | 
 | ||
|  |     itemMap := c.GetServicesByNamespace()
 | ||
|  | 
 | ||
|  |     // TODO: Handle case where namesapce == nil
 | ||
|  | 
 | ||
|  |     for _, x := range itemMap[namespace] {
 | ||
|  |         if x.Metadata.Name == servicename {
 | ||
|  |             return &x
 | ||
|  |         }
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     // No matching item found in namespace
 | ||
|  |     return nil
 | ||
|  | }
 | ||
|  | 
 | ||
|  | 
 | ||
|  | func NewK8sConnector(baseurl string) *K8sConnector {
 | ||
|  |     k := new(K8sConnector)
 | ||
|  |     k.SetBaseUrl(baseurl)
 | ||
|  | 
 | ||
|  |     return k
 | ||
|  | }
 |