Modified validation script for tracing to support CI 43/56443/1
authorEddie Arrage <eddie.arrage@huawei.com>
Tue, 24 Apr 2018 23:48:09 +0000 (23:48 +0000)
committerEddie Arrage <eddie.arrage@huawei.com>
Tue, 24 Apr 2018 23:49:49 +0000 (23:49 +0000)
- Manual cherry pick to stable/fraser of patch:
https://gerrit.opnfv.org/gerrit/#/c/55387/

Change-Id: I965326b30b2f6266f147de77c4064833856aa186
Signed-off-by: Eddie Arrage <eddie.arrage@huawei.com>
clover/tracing/tracing.py
clover/tracing/validate.py
docs/tracing.rst

index 16b952c..f646268 100644 (file)
@@ -10,7 +10,7 @@ import time
 import redis
 
 TRACING_IP = "localhost"
-TRACING_PORT = "30888"
+TRACING_PORT = "16686"
 
 
 class Tracing:
index 9cbfdd0..e1f810f 100644 (file)
@@ -6,12 +6,10 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 
 from kubernetes import client, config
+import argparse
 
 from clover.tracing.tracing import Tracing
 
-JAEGER_IP = "localhost"
-# JAEGER_IP = "1.1.1.1"
-JAEGER_PORT = "30888"
 JAEGER_DEPLOYMENT = "jaeger-deployment"
 ISTIO_NAMESPACE = "istio-system"
 ISTIO_SERVICES = ["istio-ingress", "istio-mixer"]
@@ -36,10 +34,12 @@ def validateDeploy():
             validate = True
     return validate
 
-# Services in Jaeger will only be present when traffic passes through Istio
-# Requires a deployment in Istio service mesh with some traffic targeting nodes
-def validateServices():
-    t = Tracing(JAEGER_IP, JAEGER_PORT)
+
+# Services in Jaeger will only be present when traffic targets istio-ingress
+# Even a failed HTTP GET request to istio-ingress will add istio-ingress and
+# istio-mixer services
+def validateServices(args):
+    t = Tracing(args['ip'], args['port'])
     services = t.getServices()
     validate = True
     if services:
@@ -47,14 +47,20 @@ def validateServices():
             if s in services:
                 print("Service in tracing: {} present".format(s))
             else:
+                print("Service in tracing: {} not present".format(s))
                 validate = False
     else:
         validate = False
     return validate
 
 
-def main():
-    if validateDeploy() and validateServices():
+def main(args):
+    vdeploy = validateDeploy()
+    if args['s']:
+        vservice = validateServices(args)
+    else:
+        vservice = True
+    if vdeploy and vservice:
         print"Jaeger tracing validation has passed"
         return True
     else:
@@ -63,4 +69,16 @@ def main():
 
 
 if __name__ == '__main__':
-    main()
+    parser = argparse.ArgumentParser()
+    parser.add_argument(
+            '-s', action='store_true',
+            help='Validate istio services, \
+            which requires at least one http request to istio-ingress')
+    parser.add_argument(
+            '-ip', default='localhost',
+            help='IP address to access Jaeger')
+    parser.add_argument(
+            '-port', default='16686',
+            help='Port to acccess Jaeger')
+    args = parser.parse_args()
+    main(vars(args))
index 79d686c..b83274c 100644 (file)
@@ -13,20 +13,26 @@ following command::
     kubectl apply -n istio-system -f https://raw.githubusercontent.com/jaegertracing/jaeger-kubernetes/master/all-in-one/jaeger-all-in-one-template.yml
 
 The standard Jaeger REST port is at 16686. To make this service available outside of the
-Kubernetes cluster, use the following command::
+Kubernetes cluster via any node IP in the cluster, use the following command::
 
     kubectl expose -n istio-system deployment jaeger-deployment --port=16686 --type=NodePort
 
-Kubernetes will expose the Jaeger service on another port, which can be found with::
+Kubernetes will expose the Jaeger service on another port from 30000-32767 and the assignment can
+be found with::
 
     kubectl get svc -n istio-system
 
 An example listing from the command above is shown below where the Jaeger service is exposed
-externally on port 30888::
+externally on port 30888 in this case::
 
     istio-system   jaeger-deployment   NodePort  10.104.113.94  <none> 16686:30888/TCP
 
-Jaeger will be accessible using the host IP of the Kubernetes cluster and port provided.
+Jaeger will be accessible using the host IP of any node in Kubernetes cluster and port provided.
+With this method, the Jaeger UI will also be available from a remote host. If external access is
+required to Jaeger but restricted to cluster localhost(s), an alternate method is to use the
+**port-forward** command in the foreground, as shown below::
+
+    kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686:16686
 
 ********
 Validate
@@ -40,5 +46,6 @@ It validates the installation with the following criteria:
 
 #. Existence of Jaeger all-in-one deployment using Kubernetes
 #. Jaeger service is accessible using IP address and port configured in installation steps
-#. Jaeger can retrieve default service listing for default Istio components
-#. TBD - consider installation of production setup with cassandra or elastic search
+#. Optionally, if Jaeger can retrieve service listing for default Istio components
+   (istio-ingress, istio-mixer). At least one HTTP request must be sent to istio-ingress
+   after initial Jaeger deployment for this validation to function.