.. This work is a derivative of https://wiki.onap.org/display/DW/Modeling+Concepts#Concepts-2026349199
.. This work is licensed under a Creative Commons Attribution 4.0
.. International License. http://creativecommons.org/licenses/by/4.0
.. Copyright (C) 2020 Deutsche Telekom AG.

External Systems support
-------------------------------------

Interaction with **external systems** is made **dynamic**, removing
development cycle to support new endpoint.

In order to define the external system information, TOSCA provides
**dsl_definitions**. Link to TOSCA spec `info 1
<http://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.2/csd01/TOSCA-Simple-Profile-YAML-v1.2-csd01.html#_Toc494454160>`_,
`info 2 <http://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.2/csd01/TOSCA-Simple-Profile-YAML-v1.2-csd01.html#_Toc494454173>`_.

Use cases:

* Resource resolution using **REST** (see tab Node Type) or **SQL** (see tab Node Type) external systems
* **gRPC** is supported for remote execution
* Any REST endpoint can be dynamically injected as part of the scripting framework.

Here are some examples on how to populate the system information within the package:

.. list-table::
   :widths: 100
   :header-rows: 1

   * - token-auth
   * - .. code-block:: JSON

            {
             . . .
             "dsl_definitions": {
             "ipam-1": {
                "type": "token-auth",
                "url": "http://netbox-nginx.netprog:8080",
                "token": "Token 0123456789abcdef0123456789abcdef01234567"
             }
            }

.. list-table::
   :widths: 100
   :header-rows: 1

   * - basic-auth
   * - .. code-block:: JSON

            {
             . . .
             "dsl_definitions": {
                "ipam-1": {
                   "type": "basic-auth",
                   "url": "http://localhost:8080",
                   "username": "bob",
                   "password": "marley"
                }
             }
             . . .
            }

.. list-table::
   :widths: 100
   :header-rows: 1

   * - ssl-basic-auth
   * - .. code-block:: JSON

            {
             . . .
             "dsl_definitions": {
                "ipam-1": {
                   "type" : "ssl-basic-auth",
                   "url" : "http://localhost:32778",
                   "keyStoreInstance": "JKS or PKCS12",
                   "sslTrust": "trusture",
                   "sslTrustPassword": "trustore password",
                   "sslKey": "keystore",
                   "sslKeyPassword: "keystore password"
                }
             }
             . . .
            }
         
.. list-table::
   :widths: 100
   :header-rows: 1

   * - grpc-executor
   * - .. code-block:: JSON

            {
             . . .
             "dsl_definitions": {
             "remote-executor": {
                "type": "token-auth",
                "host": "cds-command-executor.netprog",
                "port": "50051",
                "token": "Basic Y2NzZGthcHBzOmNjc2RrYXBwcw=="
             },
             }
             . . .
            }

.. list-table::
   :header-rows: 1

   * - maria-db
   * - .. code-block:: JSON

            {
             . . .
             "dsl_definitions": {
                "netprog-db": {
                   "type": "maria-db",
                   "url": "jdbc:mysql://10.195.196.123:32050/netprog",
                   "username": "netprog",
                   "password": "netprog"
                }
             }
             . . .
            }