TOSCA allows for defining interfaces for Node Types to provide manageability operations that a TOSCA management environment can use to control instances created from that Node Types. When viewed in isolation, a Node Type and its interfaces can be designed self-contained, i.e. without a direct dependency on other Node Types or their interfaces. Referring to the application server example above, the 'Application Server' Node Type interface could define all the operations to deploy, operate and decommission an application server instance as a standalone component. However, as soon as one node is set in relation to one or more other nodes, additional operations are often required to establish the respective relationships. For example, if an application server shall be connected to a database, an additional 'connectToDatabase' operation would be required to establish a database connection between the application server and the database. With the current design of TOSCA, this would mean to define another operation in the interface of the 'Application Server' Node Type.
This seems ok for general application server and database scenarios, since connecting an application server to a database is a common operation and therefore fits into the interface of an 'Application Server' Node Type. In more specific cases, however, the approach can lead to problems, when different operations (or at least different implementation artifacts) are required depending on the specific type of peer node. For example, different operations or implementation artifacts will be required when connecting an application server to an IBM DB2 database or an Oracle database, or even for different versions of the same database product. Extending the interface of a Node Type would require the definition of a new Node Type that derives from the original Node Type. The derived Node Type would then be specific to a certain other Node Type it can be set in relation to - maybe even a specific version of another Node Type. However, that approach break the self-contained design of Node types and limits the re-use of derived Node Types.