<html><head>
    <title>Quicklinks To Running Instances</title>
  </head>

  <body>
    <h1>The Portal</h1>

    The portal is the entry point to design/provision/operate ONAP. From there you can get to SDC, VID and Policy portals.

    The portal can be found at:<p>

    <a href="http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/login.htm">Portal</a>
    <p>
    One requires role based user names and passwords to receive the full portal functionality. In the demo setup we pre provisioned:
    <p>
    <ul>
      <li> jh0003 Admin </li>
      <li> cs0008 Designer </li>
      <li> jm0007 Tester </li>
      <li> op0001 Operator </li>
      <li> gv0001 Governance </li>
      <li> pm0001 Product Manager </li>
      <li> ps0001 Product Strategy </li>
    </ul>
    <p>
    the password for all of them is: demo123456!

    <h3>/etc/hosts or C:\Windows\system32\drivers\etc\hosts</h>
	<pre>

portal-app.onap portal portal.api.simpledemo.onap.org
N/A sdc sdc.api.simpledemo.onap.org
vid.onap vid vid.api.simpledemo.onap.org
pdp.onap policy policy.api.simpledemo.onap.org
aai.onap aai1 aai.api.simpledemo.onap.org

10.0.10.1 robot
appc.onap appc
so.onap  so
sdnc.onap sdnc
msb-iag.onap multi-service
dcae-healthcheck.onap dcae
message-router.onap message-router
clamp.onap clamp

portal-app.onap vm-portal
N/A vm-sdc
vid.onap vm-vid
pdp.onap vm-policy
aai.onap vm-aai1
10.0.10.1 vm-robot
appc.onap vm-appc
so.onap  vm-so
sdnc.onap vm-sdnc
msb-iag.onap vm-multi-service
dcae-healthcheck.onap vm-dcae
message-router.onap vm-message-router
clamp.onap vm-clamp

	</pre>

    <h1> The Reality </h1>

    As everything should go through the portal there are many subsystems which have there own GUI or API which come in very handy when debugging things. Here the most important once.

    <h2> Testing </h2>

	<h3>Robot Logs</h3>

    <a href="http://10.0.10.1:88/logs/"> Robot Logs </a>

    <h3>Robot vm_properties.py for local testing</h3>
    <pre>
GLOBAL_INJECTED_ARTIFACTS_VERSION = "1.3.0-SNAPSHOT"
GLOBAL_INJECTED_GITLAB_PASSWORD = "password"
GLOBAL_INJECTED_GITLAB_USERNAME = "username"
GLOBAL_INJECTED_NETWORK = "9189c64c-f148-4c73-b6d6-89f8efe9d426"
GLOBAL_INJECTED_NEXUS_DOCKER_REPO = "nexus3.onap.org:10001"
GLOBAL_INJECTED_NEXUS_PASSWORD = "password"
GLOBAL_INJECTED_NEXUS_USERNAME = "docker"
GLOBAL_INJECTED_OPENSTACK_API_KEY = "openstackapikey"
GLOBAL_INJECTED_OPENSTACK_PASSWORD = "openstackpass"
GLOBAL_INJECTED_OPENSTACK_USERNAME = "openstackuser"
GLOBAL_INJECTED_OPENSTACK_TENANT_ID = "d570c718cbc545029f40e50b75eb13df"
GLOBAL_INJECTED_REGION = "RegionOne"
GLOBAL_INJECTED_KEYSTONE = "http://10.12.25.2:5000"
GLOBAL_INJECTED_AAI1_IP_ADDR = "aai.onap"
GLOBAL_INJECTED_APPC_IP_ADDR = "appc.onap"
GLOBAL_INJECTED_DCAE_IP_ADDR = "dcae-healthcheck.onap"
GLOBAL_INJECTED_SO_IP_ADDR = "so.onap"
GLOBAL_INJECTED_MR_IP_ADDR = "message-router.onap"
GLOBAL_INJECTED_BC_IP_ADDR = "dmaap-bc.onap"
GLOBAL_INJECTED_POLICY_IP_ADDR = "pdp.onap"
GLOBAL_INJECTED_PORTAL_IP_ADDR = "portal-app.onap"
GLOBAL_INJECTED_SDC_IP_ADDR = "N/A"
GLOBAL_INJECTED_SDNC_IP_ADDR = "sdnc.onap"
GLOBAL_INJECTED_VID_IP_ADDR = "vid.onap"
GLOBAL_INJECTED_MSB_IP_ADDR = "msb-iag.onap"
GLOBAL_INJECTED_CLAMP_IP_ADDR = "clamp.onap"
GLOBAL_INJECTED_VM_FLAVOR = "m1.medium"
GLOBAL_INJECTED_VM_IMAGE_NAME = "ubuntu-14-04-cloud-amd64"
GLOBAL_INJECTED_PUBLIC_NET_ID = "971040b2-7059-49dc-b220-4fab50cb2ad4"

    </pre>

    <h2> SDN-C </h2>

    <a  href="http://admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U@sdnc.onap:8282/apidoc/explorer/index.html"> Controller </a>  with admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U <p>

    <a  href="http://sdnc.onap:8843/signup"> To sign up </a> <p>
    <a  href="http://sdnc.onap:8843/login"> Admin </a> <p>

    <h2> App-C </h2>

    <a  href="http://admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U@appc.onap:8282/apidoc/explorer/index.html"> Controller </a>  with admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U <p>

    <h2> Policy </h2>

  <b> Not working. </b> :
    <a href="http://healthcheck:zb!XztG34@pdp.onap:6969/healthcheck"> Healthcheck </a> <p>

    <h2> SO </h2>

    <a href="http://admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U@so.onap:9990/"> JBOSS GUI </a> with admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U <p>

    <a href="http://so.onap:8080/camunda"> Camunda GUI </a> with admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U <p>

    <h2> DCAE </h2>

    <h3> General GUIs </h3>
    <a href="http://console:ZjJkYjllMjljMTI2M2Iz@dcae-healthcheck.onap:9998/resources"> DCAE Controller </a>
    This might show up empty in a web browser as no content type is set in the response. If that's the case use curl: <p>

     curl http://console:ZjJkYjllMjljMTI2M2Iz@dcae-healthcheck.onap:9998/resources <p>

    <a href="http://10.0.4.105:9999/ns/TCA/apps/dcae-tca/programs/flows/TCAVESCollectorFlow/runs"> CDAP GUI </a> <p>

    <h3> DCAE internal Message Router </h3>

    <a href="http://10.0.4.102:3904/topics"> Topics </a> <p>

    <a href="http://10.0.4.102:3904/events/unauthenticated.SEC_MEASUREMENT_OUTPUT/monitor/0?timeout=10000"> MR topic for collector to TCA </a> <p>

    <a href="http://10.0.4.102:3904/events/unauthenticated.TCA_EVENT_OUTPUT/monitor/0?timeout=10000"> MR topic for TCA alert to Policy </a> <p>

    <h2> Message Router used between core components </h2>

    <a href="http://message-router.onap:3904/topics"> List of Topics </a> <p>

    <h3> Topics of Interest </h3>

    For topics without authentication one can monitor the traffic on a topic with: <p>

    http://message-router.onap:3904/events/PUT_TOPIC_HERE/group1/C1?timeout=5000 <p>

    some important once listed below. <p>

    <ul>
      <li> <a href="http://message-router.onap:3904/events/APPC-CL/monitor/0?timeout=10000"> APPC-CL Topic -- Policy Publishes Requests and APP-C publishes response </a>
      <li> <a href="http://message-router.onap:3904/events/PDPP-CONFIGURATION/monitor/0?timeout=10000"> PDPD-CONFIGURATION Topic  </a>
      <li> <a href="http://message-router.onap:3904/events/POLICY-CL-MGT/monitor/0?timeout=10000"> POLICY-CL-MGT Topic -- Control loop operational policy </a>
      <li> <a href="http://message-router.onap:3904/events/DCAE-CL-EVENT/monitor/0?timeout=10000"> DCAE-CL-EVENT Topic -- Provides the Analytics output from DCAE</a>

    </ul>

    <h1> SSH to VM </h1>

    The following links will open a shell and ssh to the various running VMs (at least on a Mac). It assumes that the .ssh/config file has been set appropriately and /etc/hosts has been updated to the running instance.<p>

      <a href="ssh://aai.onap"> AAI1 </a><p>
      <a href="ssh://pdp.onap"> Policy </a><p>
      <a href="ssh://N/A"> SDC </a><p>
      <a href="ssh://portal-app.onap"> Portal </a><p>
      <a href="ssh://dcae-healthcheck.onap"> DCAE </a><p>
      <a href="ssh://appc.onap"> APP-C </a><p>
      <a href="ssh://so.onap"> SO </a><p>
      <a href="ssh://sdnc.onap"> SDN-C </a><p>
      <a href="ssh://vid.onap"> VID </a><p>
      <a href="ssh://message-router.onap"> Message Router </a><p>
      <a href="ssh://10.0.10.1"> Robot Framework for testing </a><p>
      <a href="ssh://10.0.0.1"> DNS server for management network </a><p>

        Inside the VM you can list the docker containers by typing: <p>
        docker ps <p>
        and can get a shell prompt by executing the bash command.
        For example: <p> docker exec -it onapete_container bash <p>




</body></html>
