# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. imports: - ims.yaml - smtp.yaml - cassandra.yaml dsl_definitions: clearwater_operation_dependencies: &CLEARWATER_OPERATION_DEPENDENCIES - "ssh.user > { get_property: [ HOST, host, ssh.user ] }" - "ssh.password > { get_property: [ HOST, host, ssh.password ] }" - "ssh.address > { get_attribute: [ HOST, public_address ] }" - "ssh.use_sudo > true" policy_types: clearwater.Configuration: derived_from: tosca.policies.Root properties: zone: description: >- The domain name for SIP addresses, for example if its "example.com" then a SIP address could be "6505550243@example.com". type: string geographically_redundant: description: >- Enable a geographically redundant deployment. See: http://clearwater.readthedocs.io/en/stable/Geographic_redundancy.html type: boolean default: false site_name: description: >- Used by geographically redundant deployments. type: string required: false secret: description: >- Used for registration via Ellis. type: string capability_types: clearwater.Container: description: >- Clearwater container capability. derived_from: tosca.capabilities.Container properties: hostname: type: string ssh.user: type: string ssh.password: type: string max_log_directory_size: type: scalar-unit.size default: 0 B # 0 means no max size reduce_cassandra_mem_usage: type: boolean default: false # http://clearwater.readthedocs.io/en/stable/Clearwater_IP_Port_Usage.html # SIP endpoints clearwater.Endpoint.SIP.Upstream: derived_from: tosca.capabilities.Endpoint properties: protocol: # override type: string default: sip port: # override type: tosca.datatypes.network.PortDef default: 5052 clearwater.Endpoint.SIP.Upstream.Secure: derived_from: tosca.capabilities.Endpoint properties: protocol: # override type: string default: sip port: # override type: tosca.datatypes.network.PortDef default: 5054 secure: # override type: boolean default: true clearwater.Endpoint.SIP.Proxy: derived_from: tosca.capabilities.Endpoint properties: protocol: # override type: string default: sip port: # override type: tosca.datatypes.network.PortDef default: 5058 clearwater.Endpoint.SIP.Public: derived_from: tosca.capabilities.Endpoint.Public properties: protocol: # override type: string default: sip port: # override type: tosca.datatypes.network.PortDef default: 5060 clearwater.Endpoint.SIP.Public.Secure: derived_from: tosca.capabilities.Endpoint.Public properties: protocol: # override type: string default: sip port: # override type: tosca.datatypes.network.PortDef default: 5062 secure: # override type: boolean default: true # STUN endpoints clearwater.Endpoint.STUN: derived_from: tosca.capabilities.Endpoint properties: protocol: # override type: string default: stun port: # override type: tosca.datatypes.network.PortDef default: 3478 # Diameter endpoints clearwater.Endpoint.Diameter.HSS: description: >- In shared_config: hs_listen_port derived_from: tosca.capabilities.Endpoint properties: protocol: # override type: string default: diameter port: # override type: tosca.datatypes.network.PortDef default: 3868 clearwater.Endpoint.Diameter.CTF: description: >- In shared_config: ralf_listen_port derived_from: tosca.capabilities.Endpoint properties: protocol: # override type: string default: diameter port: # override type: tosca.datatypes.network.PortDef default: 3869 # Management endpoints clearwater.Endpoint.Management.Homer: derived_from: ims.interfaces.HTTP properties: port: # override type: tosca.datatypes.network.PortDef default: 7888 clearwater.Endpoint.Management.Homestead: derived_from: ims.interfaces.HTTP properties: port: # override type: tosca.datatypes.network.PortDef default: 8888 clearwater.Endpoint.Management.Homestead.Provisioning: description: >- In shared_config: homestead_provisioning_port derived_from: ims.interfaces.HTTP properties: port: # override type: tosca.datatypes.network.PortDef default: 8889 clearwater.Endpoint.Management.Sprout: derived_from: ims.interfaces.HTTP properties: port: # override type: tosca.datatypes.network.PortDef default: 9886 clearwater.Endpoint.Management.Ralf: derived_from: ims.interfaces.HTTP properties: port: # override type: tosca.datatypes.network.PortDef default: 9888 # note: some documentation shows 10888 # Web endpoints clearwater.Endpoint.Public.Web: derived_from: tosca.capabilities.Endpoint.Public properties: protocol: # override type: string default: http port: # override type: tosca.datatypes.network.PortDef default: 80 url_path: # override type: string default: / clearwater.Endpoint.Public.Web.Secure: derived_from: tosca.capabilities.Endpoint.Public properties: protocol: # override type: string default: https port: # override type: tosca.datatypes.network.PortDef default: 443 secure: # override type: boolean default: true url_path: # override type: string default: / # Other endpoints clearwater.Endpoint.Chronos: derived_from: tosca.capabilities.Endpoint properties: port: # override type: tosca.datatypes.network.PortDef default: 7253 clearwater.Endpoint.Memcached: derived_from: tosca.capabilities.Endpoint properties: port: # override type: tosca.datatypes.network.PortDef default: 11211 clearwater.Endpoint.Astaire: derived_from: tosca.capabilities.Endpoint properties: port: # override type: tosca.datatypes.network.PortDef default: 11311 data_types: clearwater.Number: derived_from: string constraints: - pattern: '^\d{10}$' node_types: # http://clearwater.readthedocs.io/en/stable/Clearwater_Architecture.html clearwater.SoftwareComponent: description: >- Clearwater software components must be installed in a Clearwater-capable compute node. derived_from: tosca.nodes.SoftwareComponent requirements: - host: # override capability: clearwater.Container relationship: tosca.relationships.HostedOn clearwater.Bono: description: >- Clearwater edge proxy. The Bono nodes form a horizontally scalable SIP edge proxy providing both a SIP IMS Gm compliant interface and a WebRTC interface to clients. Client connections are load balanced across the nodes. The Bono node provides the anchor point for the client's connection to the Clearwater system, including support for various NAT traversal mechanisms. A client is therefore anchored to a particular Bono node for the duration of its registration, but can move to another Bono node if the connection or client fails. Clients can connect to Bono using SIP/UDP or SIP/TCP. Bono supports any WebRTC client that performs call setup signaling using SIP over WebSocket. Alternatively, Clearwater can be deployed with a third party P-CSCF or Session Border Controller implementing P-CSCF. In this case Bono nodes are not required. derived_from: clearwater.SoftwareComponent capabilities: p-cscf: ims.functions.P-CSCF gm: ims.interfaces.Gm sip_endpoint: clearwater.Endpoint.SIP.Public sip_secure_endpoint: clearwater.Endpoint.SIP.Public.Secure sip_proxy: clearwater.Endpoint.SIP.Proxy # open to Sprout stun_endoint: clearwater.Endpoint.STUN requirements: - sip_downstream: capability: clearwater.Endpoint.SIP.Upstream occurrences: [ 0, UNBOUNDED ] - sip_secure_downstream: capability: clearwater.Endpoint.SIP.Upstream.Secure occurrences: [ 0, UNBOUNDED ] - ralf: # for billable events capability: clearwater.Endpoint.Management.Ralf occurrences: [ 0, 1 ] interfaces: Standard: type: tosca.interfaces.node.lifecycle.Standard create: implementation: primary: scripts/bono/create.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES delete: implementation: primary: scripts/bono/delete.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES clearwater.Sprout: description: >- Clearwater SIP router. The Sprout nodes act as a horizontally scalable, combined SIP registrar and authoritative routing proxy, and handle client authentication and the ISC interface to application servers. The Sprout nodes also contain the in-built MMTEL application server. SIP transactions are load balanced across the Sprout cluster, so there is no long-lived association between a client and a particular Sprout node. Sprout does not store any long-lived data itself and instead uses web service interfaces to Homestead and Homer to retrieve HSS configuration such as authentication data/user profiles and MMTEL service settings APIs to Vellum for storing subscriber registration data and for running timers. Sprout is where the bulk of the I-CSCF and S-CSCF function resides, with the remainder provided by Dime (and backed by the long-lived data stores on Vellum). derived_from: clearwater.SoftwareComponent capabilities: sip_endpoint: clearwater.Endpoint.SIP.Upstream # open to Bono sip_secure_endpoint: clearwater.Endpoint.SIP.Upstream.Secure # open to Bono management_endpoint: clearwater.Endpoint.Management.Sprout memento: type: tosca.capabilities.Container valid_source_types: [ clearwater.Memento ] requirements: # cyclical: see ARIA-327 # - sip_upstream: # capability: clearwater.Endpoint.SIP.Proxy # occurrences: [ 0, UNBOUNDED ] - homer: # for subscriber profiles capability: clearwater.Endpoint.Management.Homer - ralf: # for billable events capability: clearwater.Endpoint.Management.Ralf occurrences: [ 0, 1 ] - chronos: capability: clearwater.Endpoint.Chronos node: clearwater.Vellum - astaire: capability: clearwater.Endpoint.Astaire node: clearwater.Vellum interfaces: Standard: type: tosca.interfaces.node.lifecycle.Standard create: implementation: primary: scripts/sprout/create.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES delete: implementation: primary: scripts/sprout/delete.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES clearwater.Memento: derived_from: tosca.nodes.Root capabilities: sip-as: ims.functions.SIP-AS web_secure_endpoint: clearwater.Endpoint.Public.Web.Secure requirements: - host: capability: tosca.capabilities.Container node: clearwater.Sprout - cassandra_thrift: capability: cassandra.Endpoint.Thrift node: clearwater.Vellum interfaces: Standard: type: tosca.interfaces.node.lifecycle.Standard create: implementation: primary: scripts/memento/create.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES delete: implementation: primary: scripts/memento/delete.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES clearwater.Dime: description: >- Clearwater Diameter gateway. Dime nodes run Clearwater's Homestead and Ralf components. derived_from: clearwater.SoftwareComponent capabilities: host: type: tosca.capabilities.Container valid_source_types: [ clearwater.DimeSoftwareComponent ] interfaces: Standard: type: tosca.interfaces.node.lifecycle.Standard create: implementation: primary: scripts/dime/create.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES delete: implementation: primary: scripts/dime/delete.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES clearwater.DimeSoftwareComponent: description: >- Base type for Dime software components. derived_from: clearwater.SoftwareComponent requirements: - host: # override capability: tosca.capabilities.Container node: clearwater.Dime clearwater.Homestead: description: >- Clearwater HSS cache. Homestead provides a web services interface to Sprout for retrieving authentication credentials and user profile information. It can either master the data (in which case it exposes a web services provisioning interface) or can pull the data from an IMS compliant HSS over the Cx interface. The Homestead nodes themselves are stateless - the mastered / cached subscriber data is all stored on Vellum (via Cassandra's Thrift interface). In the IMS architecture, the HSS mirror function is considered to be part of the I-CSCF and S-CSCF components, so in Clearwater I-CSCF and S-CSCF function is implemented with a combination of Sprout and Dime clusters. derived_from: clearwater.DimeSoftwareComponent capabilities: hss: ims.functions.HSS cx: ims.interfaces.Cx diameter_endpoint: clearwater.Endpoint.Diameter.HSS management_endpoint: clearwater.Endpoint.Management.Homestead # open to Ellis provisioning_management_endpoint: clearwater.Endpoint.Management.Homestead.Provisioning # open to Ellis requirements: - cassandra_thrift: capability: cassandra.Endpoint.Thrift node: clearwater.Vellum interfaces: Standard: type: tosca.interfaces.node.lifecycle.Standard create: implementation: primary: scripts/homestead/create.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES delete: implementation: primary: scripts/homestead/delete.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES clearwater.Ralf: description: >- Clearwater CTF. Ralf provides an HTTP API that both Bono and Sprout can use to report billable events that should be passed to the CDF (Charging Data Function) over the Rf billing interface. Ralf is stateless, using Vellum to maintain the long lived session state and run the timers necessary to enable it to conform to the Rf protocol. derived_from: clearwater.DimeSoftwareComponent capabilities: ctf: ims.functions.CTF rf: ims.interfaces.Rf diameter_endpoint: clearwater.Endpoint.Diameter.CTF management_endpoint: clearwater.Endpoint.Management.Ralf # open to Sprout, Bono, Vellum requirements: - chronos: capability: clearwater.Endpoint.Chronos node: clearwater.Vellum - astaire: capability: clearwater.Endpoint.Astaire node: clearwater.Vellum interfaces: Standard: type: tosca.interfaces.node.lifecycle.Standard create: implementation: primary: scripts/ralf/create.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES delete: implementation: primary: scripts/ralf/delete.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES clearwater.Vellum: description: >- Clearwater state store. Vellum is used to maintain all long-lived state in the deployment. It does this by running a number of cloud optimized, distributed storage clusters. - Cassandra. Cassandra is used by Homestead to store authentication credentials and profile information, and is used by Homer to store MMTEL service settings. Vellum exposes Cassandra's Thrift API. - etcd. etcd is used by Vellum itself to share clustering information between Vellum nodes and by other nodes in the deployment for shared configuration. - Chronos. Chronos is a distributed, redundant, reliable timer service developed by Clearwater. It is used by Sprout and Ralf nodes to enable timers to be run (e.g. for SIP Registration expiry) without pinning operations to a specific node (one node can set the timer and another act on it when it pops). Chronos is accessed via an HTTP API. - Memcached / Astaire. Vellum also runs a Memcached cluster fronted by Astaire. Astaire is a service developed by Clearwater that enabled more rapid scale up and scale down of memcached clusters. This cluster is used by Sprout and Ralf for storing registration and session state. derived_from: clearwater.SoftwareComponent capabilities: cassandra_endpoint: cassandra.Endpoint # open to other Vellum cassandra_thrift_endpoint: cassandra.Endpoint.Thrift # open to Homer, Dime (Homestead), Sprout (Memento) chronos_endpoint: clearwater.Endpoint.Chronos # open to other Vellum, Sprout, Dime (Ralf) memcached_endpoint: clearwater.Endpoint.Memcached # open to other Vellum astaire_endpoint: clearwater.Endpoint.Astaire # open to Sprout, Dime (Ralf) # cyclical: see ARIA-327 # requirements: # - ralf: # capability: clearwater.Endpoint.Management.Ralf # occurrences: [ 0, 1 ] interfaces: Standard: type: tosca.interfaces.node.lifecycle.Standard create: implementation: primary: scripts/vellum/create.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES delete: implementation: primary: scripts/vellum/delete.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES clearwater.Homer: description: >- Clearwater XDMS. Homer is a standard XDMS used to store MMTEL service settings documents for each user of the system. Documents are created, read, updated and deleted using a standard XCAP interface. As with Homestead, the Homer nodes use Vellum as the data store for all long lived data. derived_from: clearwater.SoftwareComponent capabilities: xdms: ims.functions.XDMS management_endpoint: clearwater.Endpoint.Management.Homer # open to Sprout, Ellis requirements: - cassandra_thrift: capability: cassandra.Endpoint.Thrift node: clearwater.Vellum interfaces: Standard: type: tosca.interfaces.node.lifecycle.Standard create: implementation: primary: scripts/homer/create.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES delete: implementation: primary: scripts/homer/delete.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES clearwater.Ellis: description: >- Ellis is a sample provisioning portal providing self sign-up, password management, line management and control of MMTEL service settings. It is not intended to be a part of production Clearwater deployments (it is not easy to horizontally scale because of the MySQL underpinnings for one thing) but to make the system easy to use out of the box. derived_from: clearwater.SoftwareComponent properties: provision_numbers_start: type: clearwater.Number default: '6505550000' provision_numbers_count: type: integer default: 0 # 0 means do not provision numbers constraints: - greater_or_equal: 0 capabilities: web_endpoint: clearwater.Endpoint.Public.Web web_secure_endpoint: clearwater.Endpoint.Public.Web.Secure requirements: - homer: # for subscriber profiles capability: clearwater.Endpoint.Management.Homer - homestead: # for subscriber authentication capability: clearwater.Endpoint.Management.Homestead - homestead_provisioning: capability: clearwater.Endpoint.Management.Homestead.Provisioning - ralf: # TODO: really? capability: clearwater.Endpoint.Management.Ralf occurrences: [ 0, 1 ] - smtp: capability: smtp.SMTP interfaces: Standard: type: tosca.interfaces.node.lifecycle.Standard create: implementation: primary: scripts/ellis/create.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES configure: implementation: primary: scripts/ellis/configure.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES delete: implementation: primary: scripts/ellis/delete.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES clearwater.I-CSCF: description: >- Clearwater I-CSCF. Logical node encompassing Sprout and Homestead. Required only if you need to expose the I-CSCF function. derived_from: tosca.nodes.Root capabilities: i-cscf: ims.functions.I-CSCF requirements: - sprout: capability: tosca.capabilities.Node node: clearwater.Sprout - homestead: capability: tosca.capabilities.Node node: clearwater.Homestead clearwater.S-CSCF: description: >- Clearwater S-CSCF. Logical node encompassing Sprout and Homestead. Required only if you need to expose the S-CSCF function. derived_from: tosca.nodes.Root capabilities: s-cscf: ims.functions.S-CSCF requirements: - sprout: capability: tosca.capabilities.Node node: clearwater.Sprout - homestead: capability: tosca.capabilities.Node node: clearwater.Homestead clearwater.LiveTest: derived_from: tosca.nodes.SoftwareComponent interfaces: Standard: type: tosca.interfaces.node.lifecycle.Standard create: implementation: primary: scripts/live-test/create.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES delete: implementation: primary: scripts/live-test/delete.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES clearwater.HostBase: derived_from: tosca.nodes.Compute interfaces: Standard: type: tosca.interfaces.node.lifecycle.Standard configure: implementation: primary: scripts/host-base/configure.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES capabilities: host: # override type: clearwater.Container valid_source_types: [ tosca.nodes.SoftwareComponent ] os: # override type: tosca.capabilities.OperatingSystem properties: architecture: type: string default: x86_64 type: type: string default: linux distribution: type: string default: ubuntu version: type: version default: 14.04 clearwater.Host: description: >- Default Clearwater host. Note that any node can function as a Clearwater host as long as it has a clearwater.Container capability. derived_from: clearwater.HostBase capabilities: host: # override type: clearwater.Container valid_source_types: [ tosca.nodes.SoftwareComponent ] properties: mem_size: type: scalar-unit.size constraints: - greater_or_equal: 0 MB default: 4 GB # will run out of memory with less than this interfaces: Standard: type: tosca.interfaces.node.lifecycle.Standard configure: implementation: primary: scripts/host/configure.sh dependencies: *CLEARWATER_OPERATION_DEPENDENCIES