<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}}}}portal portal.api.simpledemo.onap.org
{{sdc}} sdc sdc.api.simpledemo.onap.org
{{vid}} vid vid.api.simpledemo.onap.org
{{policy}} policy policy.api.simpledemo.onap.org
{{aai1}} aai1 aai.api.simpledemo.onap.org

{{robot}} robot
{{appc}} appc
{{mso}}  so
{{sdnc}} sdnc
{{openo}} multi-service
{{dcae_controller}} dcae
{{message_router}} message-router
{{bus_controller}} dmaap-bc
{{clamp}} clamp

{{portal}} {{prefix}}-portal
{{sdc}} {{prefix}}-sdc
{{vid}} {{prefix}}-vid
{{policy}} {{prefix}}-policy
{{aai1}} {{prefix}}-aai1
{{robot}} {{prefix}}-robot
{{appc}} {{prefix}}-appc
{{mso}}  {{prefix}}-so
{{sdnc}} {{prefix}}-sdnc
{{openo}} {{prefix}}-multi-service
{{dcae_controller}} {{prefix}}-dcae
{{message_router}} {{prefix}}-message-router
{{clamp}} {{prefix}}-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://{{robot}}:88/logs/"> Robot Logs </a>

    <h3>Robot vm_properties.py for local testing</h3>
    <pre>
GLOBAL_INJECTED_ARTIFACTS_VERSION = "{{GLOBAL_INJECTED_ARTIFACTS_VERSION}}"
GLOBAL_INJECTED_GITLAB_PASSWORD = "password"
GLOBAL_INJECTED_GITLAB_USERNAME = "username"
GLOBAL_INJECTED_NETWORK = "{{GLOBAL_INJECTED_NETWORK}}"
GLOBAL_INJECTED_NEXUS_DOCKER_REPO = "{{GLOBAL_INJECTED_NEXUS_DOCKER_REPO}}"
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 = "{{GLOBAL_INJECTED_OPENSTACK_TENANT_ID}}"
GLOBAL_INJECTED_REGION = "{{GLOBAL_INJECTED_REGION}}"
GLOBAL_INJECTED_KEYSTONE = "{{GLOBAL_INJECTED_KEYSTONE}}"
GLOBAL_INJECTED_AAI1_IP_ADDR = "{{aai1}}"
GLOBAL_INJECTED_APPC_IP_ADDR = "{{appc}}"
GLOBAL_INJECTED_DCAE_IP_ADDR = "{{dcae_controller}}"
GLOBAL_INJECTED_SO_IP_ADDR = "{{mso}}"
GLOBAL_INJECTED_MR_IP_ADDR = "{{message_router}}"
GLOBAL_INJECTED_BC_IP_ADDR = "{{bus_controller}}"
GLOBAL_INJECTED_POLICY_IP_ADDR = "{{policy}}"
GLOBAL_INJECTED_PORTAL_IP_ADDR = "{{portal}}"
GLOBAL_INJECTED_SDC_IP_ADDR = "{{sdc}}"
GLOBAL_INJECTED_SDNC_IP_ADDR = "{{sdnc}}"
GLOBAL_INJECTED_VID_IP_ADDR = "{{vid}}"
GLOBAL_INJECTED_MSB_IP_ADDR = "{{openo}}"
GLOBAL_INJECTED_CLAMP_IP_ADDR = "{{clamp}}"
GLOBAL_INJECTED_VM_FLAVOR = "{{GLOBAL_INJECTED_VM_FLAVOR}}"
GLOBAL_INJECTED_VM_IMAGE_NAME = "{{GLOBAL_INJECTED_VM_IMAGE_NAME}}"
GLOBAL_INJECTED_PUBLIC_NET_ID = "{{GLOBAL_INJECTED_PUBLIC_NET_ID}}"

    </pre>

    <h2> SDN-C </h2>

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

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

    <h2> App-C </h2>

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

    <h2> Policy </h2>

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

    <h2> MSO </h2>

    <a href="http://admin:Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U@{{mso}}:9990/"> JBOSS GUI </a> with admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U <p>

    <a href="http://{{mso}}:8080/camunda"> Camunda GUI </a> with admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U <p>

    <h2> DCAE </h2>

    <h3> General GUIs </h3>
    <a href="http://console:ZjJkYjllMjljMTI2M2Iz@{{dcae_controller}}: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_controller}}:9998/resources <p>

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

    <h3> DCAE internal Message Router </h3>

    <a href="http://{{dcae_coll}}:3904/topics"> Topics </a> <p>

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

    <a href="http://{{dcae_coll}}: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}}: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}}:3904/events/PUT_TOPIC_HERE/group1/C1?timeout=5000 <p>

    some important once listed below. <p>

    <ul>
      <li> <a href="http://{{message_router}}: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}}:3904/events/PDPP-CONFIGURATION/monitor/0?timeout=10000"> PDPD-CONFIGURATION Topic  </a>
      <li> <a href="http://{{message_router}}:3904/events/POLICY-CL-MGT/monitor/0?timeout=10000"> POLICY-CL-MGT Topic -- Control loop operational policy </a>
      <li> <a href="http://{{message_router}}: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://{{aai1}}"> AAI1 </a><p>
      <a href="ssh://{{policy}}"> Policy </a><p>
      <a href="ssh://{{sdc}}"> SDC </a><p>
      <a href="ssh://{{portal}}"> Portal </a><p>
      <a href="ssh://{{dcae_controller}}"> DCAE </a><p>
      <a href="ssh://{{appc}}"> APP-C </a><p>
      <a href="ssh://{{mso}}"> MSO </a><p>
      <a href="ssh://{{sdnc}}"> SDN-C </a><p>
      <a href="ssh://{{vid}}"> VID </a><p>
      <a href="ssh://{{message_router}}"> Message Router </a><p>
      <a href="ssh://{{robot}}"> Robot Framework for testing </a><p>
      <a href="ssh://{{onapdns}}"> 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>