Esempio n. 1
0
 def __init__(self, name):
     self.name = name
     self.deployment = Deployment.objects(kube_api).get_or_none(name=name)
     self.service = Service.objects(kube_api).get_or_none(name=name)
     self.secret = Secret.objects(kube_api).get_or_none(name=name)
     self.app = self.app_from_objects()
     self.linked_deployments = self._get_linked_deployments()
 def build_registry_svc(self, namespace):
     return Service(self.api,
     {
         "metadata":
         {
             "labels":
             {
                 "app": "registry",
                 "role": "registry",
                 "tier": "backend",
                 # Not sure if this label is important
                 "docker-registry": "default"
             },
             "name": "docker-registry",
             "namespace": namespace
         },
         "spec":
         {
             "ports":
             [{
                 "name": "registry",
                 "targetPort": "registry",
                 "port": 5000,
                 "protocol": "TCP"
             }],
             "selector":
             {
                 "docker-registry": "default"
             }
         }
     })
 def build_etcd_service(self):
     return Service(self.api,
     {
         "metadata":
         {
             "name": "etcd",
             "namespace": "openshift-origin"
         },
         "spec":
         {
             "ports":
             [{
                 "name": "client",
                 "port": 4001,
                 "targetPort": "client"
             }, {
                 "name": "server",
                 "port": 7001,
                 "targetPort": "server"
             }],
             "selector":
             {
                 "app": "etcd",
                 "purpose": "etcd"
             },
             "type": "ClusterIP"
         }
     })
Esempio n. 4
0
def deploy_service(template_pod, template_service, branch, domain_zone):
    #api = HTTPClient(KubeConfig.from_file("{0}/.kube/config".format(os.environ['HOME'])))
    api = HTTPClient(KubeConfig.from_service_account())
    with open(template_service) as t_file:
        ts = yaml.load(t_file)
    svc_name = ts['metadata']['name']
    name = "{0}-{1}".format(svc_name, branch)
    ts['spec']['type'] = 'LoadBalancer'
    ts['spec']['selector']['name'] = name
    ts['metadata']['name'] = name
    ts['metadata']['labels']['name'] = name
    new = Service(api, ts)
    new.create()
    print "New service created"
    with open(template_pod) as t_file:
        tp = yaml.load(t_file)
    name = tp['metadata']['name']
    name = "{0}-{1}".format(name, branch)
    image = tp['spec']['containers'][0]['image']
    image = "{0}:{1}".format(image, branch)
    tp['spec']['containers'][0]['image'] = image
    tp['spec']['containers'][0]['name'] = name
    tp['metadata']['name'] = name
    tp['metadata']['labels']['name'] = name
    new = Pod(api, tp)
    new.create()
    print "New pod created"
    print "Waiting for ELB to spawn"
    lb_name = get_service_lb.wait_for_lb_name(name)
    print "Got ELB {0}".format(lb_name)
    return lb_name, svc_name
 def build_os_service(self, use_load_balancer):
     return Service(self.api,
     {
         "metadata":
         {
             "name": "openshift",
             "namespace": "openshift-origin"
         },
         "spec":
         {
             "ports":
             [{
                 "name": "web",
                 "port": 443,
                 "targetPort": "web"
             }],
             "selector":
             {
                 "app": "openshift",
                 "tier": "backend"
             },
             "type": "LoadBalancer" if use_load_balancer else "NodePort"
         }
     })
Esempio n. 6
0
                                                                                "edge_location": edge_location,
                                                                                "edge_target": edge_target,
                                                                                "run_id": pod_run_id ,
                                                                                "additional" : additional}
                        else:
                                print('Unable to get details of the tool {} from API due to errors. Empty endpoints will be returned'.format(docker_image))
                else:
                        print('Unable to get details of the tool {} from API due to errors. Empty endpoints will be returned'.format(docker_image))
        else:
                print('Unable to get details of a RunID {} from API due to errors'.format(pod_run_id))
        return service_list

kube_api = HTTPClient(KubeConfig.from_service_account())
kube_api.session.verify = False

edge_kube_service = Service.objects(kube_api).filter(selector={EDGE_SVC_ROLE_LABEL: EDGE_SVC_ROLE_LABEL_VALUE})
if len(edge_kube_service.response['items']) == 0:
        print('EDGE service is not found by label: cloud-pipeline/role=EDGE')
        exit(1)
else:
        edge_kube_service_object = edge_kube_service.response['items'][0]
        edge_kube_service_object_metadata = edge_kube_service_object['metadata']

        if 'labels' in edge_kube_service_object_metadata and EDGE_SVC_HOST_LABEL in edge_kube_service_object_metadata['labels']:
                edge_service_external_ip = edge_kube_service_object_metadata['labels'][EDGE_SVC_HOST_LABEL]

        if 'labels' in edge_kube_service_object_metadata and EDGE_SVC_PORT_LABEL in edge_kube_service_object_metadata['labels']:
                edge_service_port = edge_kube_service_object_metadata['labels'][EDGE_SVC_PORT_LABEL]

        if not edge_service_external_ip:
                edge_service_external_ip = edge_kube_service_object['spec']['externalIPs'][0]
  if str in ['true', 'True']:
    return True
  return False

def parse_service(service):
  data = Bunch(service.annotations)
  data.ip = service.obj['spec']['clusterIP']
  data.proxy_web_socket = str2bool(data.proxy_web_socket)
  data.proxy_http = str2bool(data.proxy_http)
  data.proxy_https = str2bool(data.proxy_https)
  data.proxy_https_redirect = str2bool(data.proxy_https_redirect)
  data.port = service.obj['spec']['ports'][0]['port']
  return data

if __name__ == "__main__":
  config = KubeConfig.from_service_account()
  api = HTTPClient(config)

  services = []
  for namespace in os.getenv('PROXYED_NAMESPACES', 'default').split(','):
      services += Service.objects(api).filter(namespace=namespace, selector={'proxied': 'true'})

  data = []
  for service in services:
    data.append(parse_service(service))

  result = render(data)

  with open('/etc/nginx/nginx.conf', 'w') as file:
    file.write(result)
Esempio n. 8
0
def find_service_object_by_name(pykube_api, service_name, namespace=None):
    if not service_name:
        raise ValueError("service name must not be empty")
    return Service.objects(pykube_api).filter(
        field_selector={"metadata.name": service_name}, namespace=namespace)
Esempio n. 9
0
 def load_from_kube(self, kube):
     self.pods = Pod.objects(kube).filter(namespace=self.namespace)
     self.services = Service.objects(kube).filter(namespace=self.namespace)
     self.replication_controllers = ReplicationController.objects(kube).filter(namespace=self.namespace)
     logging.debug("Loaded from kube " + str(len(self.pods)) + " pods, " + str(len(self.services)) + " services, and " + str(len(self.replication_controllers)) + " rcs.")