How to define a custom capability?

In the previous example, we used the default capability tosca.capabilities.Endpoint.Database, which has the some default properties: port, protocol:

Figure 1: Default properties of an endpoint capability

Step 1. Define a custom capability

To add more properties to a capability, or to set a default value to a capability, we define a custom one as follows:

capability_types:
# define a custom capability
tosca.capabilities.Endpoint.Database.Mongo:
derived_from: tosca.capabilities.Endpoint.Database
properties:
port:
type: integer
default: 27017

Here, the custom capability tosca.capabilities.Endpoint.Database.Mongo inherits all properties from the parent type tosca.capabilities.Endpoint.Database and set the port property to the default value 27017.

Step 2. Update the target node to have the new capability:

node_types:
otc.nodes.SoftwareComponent.MongoDB:
...
capabilities:
mongo_db:
type: tosca.capabilities.Endpoint.Database.Mongo

Step 3. Update the source node to require a target node with the new capability:

node_types:
otc.nodes.WebApplication.Nodecellar:
derived_from: tosca.nodes.WebApplication
...
requirements:
- mongo_db:
# nodecellar requires to a node that has the capability Endpoint.Database.Mongo
capability: tosca.capabilities.Endpoint.Database.Mongo
...