3
3
"""
4
4
from __future__ import print_function
5
5
from __future__ import absolute_import
6
+
7
+ import socket
8
+
6
9
import requests
7
10
import os
8
11
import six
@@ -365,7 +368,6 @@ def _legacy_test_urls(self, url, method):
365
368
if test_req .status_code in (200 , 201 ):
366
369
return True
367
370
else :
368
- logger .error (" Failed." )
369
371
return False
370
372
except REQUEST_FAILED_EXCEPTIONS as exc :
371
373
last_ex = exc
@@ -474,6 +476,65 @@ def _dump_urls(self):
474
476
475
477
logger .info ("" )
476
478
479
+ def _test_dns (self , hostname ):
480
+ port = requests .utils .DEFAULT_PORTS ["http" ]
481
+
482
+ if self .config .verbose :
483
+ logger .info (" Checking DNS for %s:%s..." , hostname , port )
484
+ else :
485
+ logger .info (" Resolving %s..." , hostname )
486
+
487
+ try :
488
+ with socket .create_connection ((hostname , port )) as conn :
489
+ conn_ip , conn_port = conn .getpeername ()
490
+ logger .debug (" Resolved as: %s:%s" , conn_ip , conn_port )
491
+ except socket .gaierror as exc :
492
+ logger .debug (" socket.gaierror: %s" , exc )
493
+ logger .error (" Can't resolve the domain name." )
494
+ logger .error (" FAILED." )
495
+ logger .error ("" )
496
+ return None
497
+
498
+ logger .info (" SUCCESS." )
499
+ logger .info ("" )
500
+ return conn_ip
501
+
502
+ def _test_ip (self , ip ):
503
+ port = requests .utils .DEFAULT_PORTS ["http" ]
504
+
505
+ try :
506
+ if self .config .verbose :
507
+ logger .info (" Connecting to %s:%s..." , ip , port )
508
+ else :
509
+ logger .info (" Connecting to %s..." , ip )
510
+
511
+ with socket .create_connection ((ip , port )) as conn :
512
+ logger .info (" SUCCESS." )
513
+ logger .info ("" )
514
+ conn .close ()
515
+ except socket .timeout :
516
+ logger .error (" Connection to %s:%s timed out." , ip , port )
517
+ logger .error (" FAILED." )
518
+ logger .info ("" )
519
+ return False
520
+ except socket .error :
521
+ logger .error (" Can't connect to %s:%s." , ip , port )
522
+ logger .error (" FAILED." )
523
+ logger .info ("" )
524
+ return False
525
+
526
+ return True
527
+
528
+ def _test_connection (self , hostname , fallback_ip = None ):
529
+ resolved_ip = self ._test_dns (hostname )
530
+
531
+ for ip in filter (None , [resolved_ip , fallback_ip ]):
532
+ success = self ._test_ip (ip )
533
+ if success :
534
+ return resolved_ip , ip
535
+
536
+ return resolved_ip , None
537
+
477
538
def test_connection (self , rc = 0 ):
478
539
"""
479
540
Test connection to Red Hat
@@ -487,6 +548,21 @@ def test_connection(self, rc=0):
487
548
logger .info ("Running Connection Tests..." )
488
549
logger .info ("" )
489
550
551
+ base_url_hostname = urlparse (self .base_url ).hostname
552
+ if base_url_hostname .endswith ("redhat.com" ):
553
+ if base_url_hostname .endswith ("stage.redhat.com" ):
554
+ base_url_ip = constants .insights_ip_stage
555
+ else :
556
+ base_url_ip = constants .insights_ip_prod
557
+ else :
558
+ base_url_ip = None
559
+
560
+ resolved_base_url_ip , success_base_url_ip = self ._test_connection (base_url_hostname , base_url_ip )
561
+ if not resolved_base_url_ip or not success_base_url_ip :
562
+ resolved_fallback_ip , success_fallback_ip = self ._test_connection ("www.redhat.com" , constants .stable_public_ip )
563
+ logger .debug ("dns %s, conn %s" , resolved_fallback_ip , success_fallback_ip )
564
+ return False
565
+
490
566
for description , url , method in [
491
567
("Uploading a file to Ingress" , self .upload_url , "POST" ),
492
568
("Getting hosts from Inventory" , self .inventory_url + "/hosts" , "GET" ),
0 commit comments