blob: d33c35fb0bf595eb205d26834cc7dd71f1eb9747 [file] [log] [blame]
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. _walkthrough:
Walk-through
============
The goal of this quickstart is to provide an overview of the
functionalities of the ``dcae-cli`` and walk you through the
capabilities:
- `Adding data formats <#adding-data-formats>`__
- `Adding component <#adding-component>`__
- `Setting profile <#setting-profile>`__
- `Development and testing <#development-and-testing>`__
- `Publishing component <#publishing-component>`__
- `Shared catalog <#shared-catalog>`__
.. This walk-through uses example projects: COMMENTED OUT FOR NOW TBD
..
.. - `laika <ONAP%20URL%20TBD>`__
.. - `CDAP examples <ONAP%20URL%20TBD>`__
.. _adding-data-formats:
Adding data formats
-------------------
``data_format`` is the sub-command that is used to execute operations
that manage `data formats <../data-formats.md>`__.
::
$ dcae_cli data_format --help
Usage: dcae_cli data_format [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
add Tracks a data format file SPECIFICATION...
generate Generates a data format file from JSON input examples
list Lists all your data formats
publish Publishes data format to make publicly...
show Provides more information about FORMAT
Your data format must be in the catalog in order to use in the component
specification. Check the catalog using the ``data_format list``
sub-command:
::
$ dcae_cli data_format list
Data formats for mh677g
+------+---------+-------------+--------+----------+
| Name | Version | Description | Status | Modified |
+------+---------+-------------+--------+----------+
| | | | | |
+------+---------+-------------+--------+----------+
The fields ``name``, ``version``, ``description`` are referenced from
the data format JSON from the ``self`` JSON.
There are no data formats so you must add the data formats that your
component specification references. Use the ``data_format add``
sub-command:
Heres an example command:
::
dcae_cli data_format add health.json
Verify that it was added:
::
$ dcae_cli data_format list
Data formats for mh677g
+-------------------------------+---------+-------------------------------------------+--------+----------------------------+
| Name | Version | Description | Status | Modified |
+-------------------------------+---------+-------------------------------------------+--------+----------------------------+
| sandbox.platform.laika.health | 0.1.0 | Data format used for the /health endpoint | staged | 2017-05-23 04:02:38.952799 |
+-------------------------------+---------+-------------------------------------------+--------+----------------------------+
Go ahead and add other referenced data formats.
If you have JSON input you can generate a data format like this:
::
$ dcae_cli data_format --keywords generate myname:1.0.0 myjsoninputfile
where ``myname`` is the name of your data format, ``1.0.0`` is an
example version, and ``myjsoninputfile`` is an example JSON input file
(a directory of input JSON files can also be provided). The
``--keywords`` option adds additional data attributes that can be
completed to provide a more detailed data characterization. In any event
the output should be reviewed for accuracy. The data format is written
to stdout.
.. _adding-component:
Adding component
----------------
``component`` is the sub-command that is used to work with operations
for components:
::
$ dcae_cli component --help
Usage: dcae_cli component [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
add
dev Set up component in development for...
list Lists components in the public catalog.
publish Pushes COMPONENT to the public catalog
run Runs the latest version of COMPONENT.
show Provides more information about COMPONENT
undeploy Undeploys the latest version of COMPONENT.
Your component must be accessible from the catalog in order for it to be
used. Check the catalog using the ``component list`` sub-command:
::
$ dcae_cli component list
Active profile: solutioning
+------+---------+------+-------------+--------+----------+-----------+
| Name | Version | Type | Description | Status | Modified | #Deployed |
+------+---------+------+-------------+--------+----------+-----------+
| | | | | | | |
+------+---------+------+-------------+--------+----------+-----------+
Use the "--deployed" option to see more details on deployments
The fields ``name``, ``version``, ``type``, ``description`` are
referenced from the component specifications ``self`` JSON.
There are no components so you must add your component. Use the
``component add`` sub-command. The command is the same for docker and
cdap components:
::
$ dcae_cli component add --help
Usage: dcae_cli component add [OPTIONS] SPECIFICATION
Options:
--update Updates a locally added component if it has not been already
pushed
--help Show this message and exit.
*Note* use the ``--update`` flag to replace existing staged instances.
The ``component dev`` sub-command can be useful in validating and
experimenting when crafting your component specification. See details
about ``dev`` under `Development and
testing <#development-and-testing>`__.
Once we add the components laika and helloworld, lets verify that they
got added ok:
::
$ dcae_cli component list
Active profile: solutioning
+-------------------------+---------+--------+---------------------------------------------------------------+--------+----------------------------+-----------+
| Name | Version | Type | Description | Status | Modified | #Deployed |
+-------------------------+---------+--------+---------------------------------------------------------------+--------+----------------------------+-----------+
| cdap.helloworld.endnode | 0.8.0 | cdap | cdap test component | staged | 2017-05-23 04:14:35.588075 | 0 |
| sandbox.platform.laika | 0.5.0 | docker | Web service used as a stand-alone test DCAE service compone.. | staged | 2017-05-23 04:07:44.065610 | 0 |
+-------------------------+---------+--------+---------------------------------------------------------------+--------+----------------------------+-----------+
Use the "--deployed" option to see more details on deployments
.. _setting-profile:
Setting profile
---------------
``profile`` is the sub-command that is used to manage profiles. These
profiles contain environment variables used to connect to different
environments. This is used in the running and deployment of your
component using the ``dcae_cli component run`` command. The ``dcae-cli``
ships with profiles for ``solutioning`` and ``rework``.
::
$ dcae_cli profiles --help
Usage: dcae_cli profiles [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
activate Sets profile NAME as the active profile
create Creates a new profile NAME initialized with...
delete Deletes profile NAME
list Lists available profiles
set Updates profile NAME such that KEY=VALUE
show Prints the profile dictionary
To see what variables a profile contains, you can use the ``show``
command, as in ``dcae_cli profiles show PROFILE_NAME``
Use the ``create`` sub-command to create your own profile and assign new
values using the ``set`` command. Afterwards you will need to
``activate`` the profile you wish to use. First take a look at which
profile is active:
::
$ dcae_cli profiles list
rework
* solutioning
The active profile is ``solutioning`` so to activate *rework* to use
``rework``:
::
$ dcae_cli profiles activate rework
Check
::
$ dcae_cli profiles list
* rework
solutioning
.. _development-and-testing:
Development and testing
-----------------------
The following operations under the sub-command ``component`` are aimed
to help developers with testing:
- ``run``
- ``undeploy``
- ``dev``
``run``
~~~~~~~
The ``run`` operation is to be used for running your application in its
container remotely on the activated environment. Docker containers have
the additional option to run locally on your development machine.
In order to run your application, you must have added your data formats
and your component to your catalog.
Lets verify that your component is in the catalog:
::
$ dcae_cli component list
Active profile: solutioning
+-------------------------+---------+--------+---------------------------------------------------------------+--------+----------------------------+-----------+
| Name | Version | Type | Description | Status | Modified | #Deployed |
+-------------------------+---------+--------+---------------------------------------------------------------+--------+----------------------------+-----------+
| cdap.helloworld.endnode | 0.8.0 | cdap | cdap test component | staged | 2017-05-23 04:14:35.588075 | 0 |
| sandbox.platform.laika | 0.5.0 | docker | Web service used as a stand-alone test DCAE service compone.. | staged | 2017-05-23 04:07:44.065610 | 0 |
+-------------------------+---------+--------+---------------------------------------------------------------+--------+----------------------------+-----------+
Use the "--deployed" option to see more details on deployments
Docker
^^^^^^
**NOTE** Make sure your Docker image has been uploaded to the shared
registry.
For Docker containers, you can run either attached or unattached.
Attached means that the dcae-cli tool will launch the container and not
terminate. The dcae-cli while attached will stream in the logs of the
Docker container. Doing a Ctrl-C will terminate the run session which
means undeploy your container and force a clean up automatically.
Running unattached means simply deploy your container. You will need to
execute ``undeploy`` when you are done testing. #### CDAP
**NOTE** Make sure your CDAP jar has been uploaded to Nexus.
TODO
``undeploy``
~~~~~~~~~~~~
The ``undeploy`` operation is to be used to undeploy any instances of a
specified component, version that you have deployed. This includes
cleaning up of configuration.
Lets undeploy ``sandbox.platform.laika`` that was deployed from the
previous section:
::
$ dcae_cli component undeploy sandbox.platform.laika:0.5.0
DCAE.Undeploy | WARNING | Undeploying components: 1
DCAE.Undeploy | WARNING | Undeployed components: 1
.. _walkthrough-dev:
``dev``
~~~~~~~
The ``dev`` operation is a convenient operation that can be useful for
the development and testing of your component. It can be used to:
- Help validate your experimental component specification before
uploading to the catalog
- Generate the application configuration from the component
specification and make it available in a test environment. This
allows you to view your resulting configuration for local development
and to help debug potential related issues.
Lets say you have a component specification called
``component-spec.json``:
::
$ dcae_cli component dev component-spec.json
Ready for component development
Setup these environment varibles. Run "source env_solutioning":
export DOCKER_HOST=SOME_DOCKER_HOST:2376
export SERVICE_CHECK_INTERVAL=15s
export CONFIG_BINDING_SERVICE=config_binding_service
export HOSTNAME=mh677g.95740959-63d2-492a-b964-62a6dce2591d.0-6-0.sandbox-platform-laika
export CONSUL_HOST=SOME_CONSUL_HOST
export CDAP_BROKER=cdap_broker
export SERVICE_NAME=mh677g.95740959-63d2-492a-b964-62a6dce2591d.0-6-0.sandbox-platform-laika
export SERVICE_CHECK_TIMEOUT=1s
export SERVICE_CHECK_HTTP=/health
Press any key to stop and to clean up
Your application configuration is now available under the name
``mh677g.95740959-63d2-492a-b964-62a6dce2591d.0-6-0.sandbox-platform-laika``.
To view the resulting configuration, you can ``curl`` a request to the
config binding service or programmatically fetch your configuration
within your application.
You need to first query Consul to get the ip and port of config binding
service:
::
curl http://$CONSUL_HOST:8500/v1/catalog/service/$CONFIG_BINDING_SERVICE
[
{
"ID": "983d5c94-c508-4a8a-9be3-5912bd09786b",
"Node": "realsolcnsl00",
"Address": "10.226.1.22",
"TaggedAddresses": {
"lan": "10.226.1.22",
"wan": "10.226.1.22"
},
"NodeMeta": {},
"ServiceID": "5f371f295c90:config_binding_service:10000",
"ServiceName": "config_binding_service",
"ServiceTags": [],
"ServiceAddress": "XXXX",
"ServicePort": 32770,
"ServiceEnableTagOverride": false,
"CreateIndex": 487,
"ModifyIndex": 487
}
]
.. _dmaap-testing:
DMaaP testing
~~~~~~~~~~~~~
Currently, the dcae-cli does not have the capability of provisioning
topics. In order to do testing with message router topics or with data
router feeds, the developer must provision the topic or the feed
manually and provide the connection details in the form of a JSON in a
file to the dcae-cli. This file is to be passed in when using the
``run`` and ``dev`` commands with the option ``--dmaap-file``.
The structure of the DMaaP JSON is an object of config keys to matching
topic or feed connection details. Config keys are the ``config_key``
values specified in your component specification streams section where
the streams must be type message router or data router. Information
about the associated connection details can be found on `this
page <dmaap-connection-objects.md>`__. Please check it out.
For example, if you have a component specification that has the
following streams entry:
.. code:: json
"streams": {
"publishes": [{
"format": "ves",
"version": "1.0.0",
"type": "message router",
"config_key": "ves_connection"
}]
}
Then to deploy and to run your component, you must use the
``--dmaap-file`` command and pass in a JSON that looks like:
.. code:: json
{
"ves_connection": {
"type": "message_router",
"dmaap_info": {
"topic_url": "https://we-are-message-router.us:3905/events/some-topic"
}
}
}
The provided DMaaP JSON is used to simulate the output of provisioning
and will be used to merge with the generated application configuration
at runtime.
Your final application config will look like:
.. code:: json
{
"streams_publishes": {
"ves_connection": {
"type": "message_router",
"dmaap_info": {
"topic_url": "https://we-are-message-router.us:3905/events/some-topic"
}
}
}
}
Data router subscribers
^^^^^^^^^^^^^^^^^^^^^^^
Note for data router subscriber testing, you will need the delivery url
in order to provision the subscriber to the feed. This is constructed at
deployment time and will be provided by the dcae-cli after you deploy
your component. The delivery urls will be displayed to the screen:
::
DCAE.Run | WARNING | Your component is a data router subscriber. Here are the delivery urls:
some-sub-dr: http://SOME_IP:32838/identity
*Sourced at deployment* testing
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Components may have configuration parameters whose values are to be
sourced at deployment time. For example, there are components whose
configuration parameters are to come from DTI events which are only
available when the component is getting deployed. These configuration
parameters must be setup correctly in the `component
specification <http://localhost:8000/components/component-specification/docker-specification/#configuration-parameters>`__
by setting the property ``sourced_at_deployment`` to ``true`` for each
and every parameter that is expected to come in at deployment time.
Once your component specification has been updated correctly, you must
use the ``--inputs-file`` command-line argument when running the
commands ``dev`` or ``run`` with your component. This is to simulate
providing the dynamic, deployment time values for those parameters
marked as ``sourced_at_deployment``.
For example, if your component specification has the following
configuration parameters:
::
"parameters": [{
"name": "vnf-ip",
"value": "",
"sourced_at_deployment": true
},
{
"name": "static-param",
"value": 5
}]
You would have to pass in an inputs file that looks like:
::
{
"vnf-ip": "10.100.1.100"
}
Your application configuration would look like:
::
{
"vnf-ip": "10.100.1.100",
"static-param": 5
}
Publishing component
--------------------
Once components have their component specifications crafted and
validated and have been tested, components should be published in the
shared onboarding catalog using the ``publish`` sub-command for both
data formats and components. You must publish all data formats of a
component before publishing a component.
Publishing will change the status of a component, be made accessible for
other developers to use, and will generate the associated TOSCA models
for use in designing of compositions.
::
dcae_cli component publish sandbox.platform.laika:0.5.0
Shared catalog
--------------
``catalog`` is the sub-command used to access and to browse the shared
onboarding catalog to view components and data formats that have been
published and that are being worked on. Components and data formats have
two statuses ``staged`` and ``published``.
Staged means that the resource has been simply added and is under
development. It is to be used only by the owner. Published means that
the resource has been fully developed and tested and is ready to be
shared.
Published components can be deployed by non-owners and published data
formats can be used in component specifications of non-owners.
There are two available operations:
::
$ dcae_cli catalog --help
Usage: dcae_cli catalog [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
list
show
Staged components can be viewed under the ``list`` operation using the
``--expanded`` flag.