(address, *args, **kwargs)
| 126 | socket_create_connection = socket.create_connection |
| 127 | |
| 128 | def kubernetes_create_connection(address, *args, **kwargs): |
| 129 | dns_name = address[0] |
| 130 | if isinstance(dns_name, bytes): |
| 131 | dns_name = dns_name.decode() |
| 132 | dns_name = dns_name.split(".") |
| 133 | if dns_name[-1] != 'kubernetes': |
| 134 | return socket_create_connection(address, *args, **kwargs) |
| 135 | if len(dns_name) not in (3, 4): |
| 136 | raise RuntimeError("Unexpected kubernetes DNS name.") |
| 137 | namespace = dns_name[-2] |
| 138 | name = dns_name[0] |
| 139 | port = address[1] |
| 140 | if len(dns_name) == 4: |
| 141 | if dns_name[1] in ('svc', 'service'): |
| 142 | service = api_instance.read_namespaced_service(name, namespace) |
| 143 | for service_port in service.spec.ports: |
| 144 | if service_port.port == port: |
| 145 | port = service_port.target_port |
| 146 | break |
| 147 | else: |
| 148 | raise RuntimeError( |
| 149 | f"Unable to find service port: {port}") |
| 150 | label_selector = [] |
| 151 | for key, value in service.spec.selector.items(): |
| 152 | label_selector.append(f"{key}={value}") |
| 153 | pods = api_instance.list_namespaced_pod( |
| 154 | namespace, label_selector=",".join(label_selector) |
| 155 | ) |
| 156 | if not pods.items: |
| 157 | raise RuntimeError("Unable to find service pods.") |
| 158 | name = pods.items[0].metadata.name |
| 159 | if isinstance(port, str): |
| 160 | for container in pods.items[0].spec.containers: |
| 161 | for container_port in container.ports: |
| 162 | if container_port.name == port: |
| 163 | port = container_port.container_port |
| 164 | break |
| 165 | else: |
| 166 | continue |
| 167 | break |
| 168 | else: |
| 169 | raise RuntimeError( |
| 170 | f"Unable to find service port name: {port}") |
| 171 | elif dns_name[1] != 'pod': |
| 172 | raise RuntimeError( |
| 173 | f"Unsupported resource type: {dns_name[1]}") |
| 174 | pf = portforward(api_instance.connect_get_namespaced_pod_portforward, |
| 175 | name, namespace, ports=str(port)) |
| 176 | return pf.socket(port) |
| 177 | socket.create_connection = kubernetes_create_connection |
| 178 | |
| 179 | # Access the nginx http server using the |
nothing calls this directly
no test coverage detected