<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_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> MSO </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"> MSO </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 openecompete_container bash <p>




</body></html>
