<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_AAI_IP_ADDR = "aai.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/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>
