<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
${aai2} aai2
${message_router} message-router
${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
${aai2} ${prefix}-aai2
${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_AAI2_IP_ADDR = "${aai2}"
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_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_OPENO_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://${aai2}"> AAI2 </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>
