# ================================================================================ # Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved. # ================================================================================ # Licensed 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. # ============LICENSE_END========================================================= # # ECOMP is a trademark and service mark of AT&T Intellectual Property. tosca_definitions_version: cloudify_dsl_1_3 imports: - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml plugins: docker: executor: 'central_deployment_agent' package_name: dockerplugin package_version: 3.2.1 data_types: # NOTE: These data types were copied from the k8s node type in order to have # consistent node properties between docker and k8s. Perhaps we should make # these data_types common somehow? dcae.types.MSBRegistration: description: > Information for registering an HTTP service into MSB. It's optional to do so, but if MSB registration is desired at least the port property must be provided. If 'port' property is not provided, the plugin will not do the registration. (The properties all have to be declared as not required, otherwise the 'msb_registration' property on the node would also be required.) properties: port: description: The container port at which the service is exposed type: string required: false version: description: The version identifier for the service type: string required: false url_path: description: The URL path (e.g., "/api", not the full URL) to the service endpoint type: string required: false uses_ssl: description: Set to true if service endpoint uses SSL (TLS) type: boolean required: false dcae.types.LoggingInfo: description: > Information for setting up centralized logging via ELK using a "sidecar" container. If 'log_directory' is not provided, the plugin will not set up ELK logging. (The properties all have to be declared as not required, otherwise the 'log_info' property on the node would also be required.) properties: log_directory: description: > The path in the container where the component writes its logs. If the component is following the EELF requirements, this would be the directory where the four EELF files are being written. (Other logs can be placed in the directory--if their names in '.log', they'll also be sent into ELK.) type: string required: false alternate_fb_path: description: > Hope not to use this. By default, the plugin will mount the log volume at /var/log/onap/ in the sidecar container's file system. 'alternate_fb_path' allows overriding the default. Will affect how the log data can be found in the ELK system. type: string required: false node_types: # The DockerContainerForComponents node type is to be used for DCAE service components that # are to be run in a Docker container. This node type goes beyond that of a ordinary Docker # plugin where it has DCAE platform specific functionality: # # * Generation of the service component name # * Managing of service component configuration information # # The Docker run command arguments are intentionally not visible. This node type is # not intended to be a generic all-purpose Docker container thing. This should be thought # to be an interface to how Docker containers are to be run in the rework context. dcae.nodes.DockerContainerForComponents: derived_from: cloudify.nodes.Root properties: service_component_type: type: string description: Service component type of the application being run in the container service_id: type: string description: > Unique id for this DCAE service instance this component belongs to. This value will be applied as a tag in the registration of this component with Consul. default: Null location_id: type: string description: > Location id of where to run the container. DEPRECATED - No longer used. Infer the location from the docker host service and/or node. default: Null service_component_name_override: type: string description: > Manually override and set the name for this Docker container node. If this is set, then the name will not be auto-generated. Platform services are the specific use cases for using this parameter because they have static names for example the CDAP broker. default: Null application_config: default: {} description: > Application configuration for this Docker component. The data strcture is expected to be a complex map (native YAML) and to be constructed and filled by the creator of the blueprint. docker_config: default: {} description: > This is what is the auxilary portion of the component spec that contains things like healthcheck definitions for the Docker component. Health checks are optional. image: type: string description: Full uri of the Docker image # The following properties are copied from k8s node type to be consistent. # However, these properties are not currently being used within the docker # plugin. log_info: type: dcae.types.LoggingInfo description: > Information for setting up centralized logging via ELK. required: false replicas: type: integer description: > The number of instances of the component that should be launched initially default: 1 always_pull_image: type: boolean description: > Set to true if the orchestrator should always pull a new copy of the image before deploying. By default the orchestrator pulls only if the image is not already present on the Docker host where the container is being launched. default: false interfaces: cloudify.interfaces.lifecycle: create: # Generate service component name and populate config into Consul implementation: docker.dockerplugin.create_for_components start: # Create Docker container and start implementation: docker.dockerplugin.create_and_start_container_for_components stop: # Stop and remove Docker container implementation: docker.dockerplugin.stop_and_remove_container delete: # Delete configuration from Consul implementation: docker.dockerplugin.cleanup_discovery dcae.interfaces.policy: # This is to be invoked by the policy handler upon policy updates policy_update: implementation: docker.dockerplugin.policy_update # This node type is intended for DCAE service components that use DMaaP and must use the # DMaaP plugin. dcae.nodes.DockerContainerForComponentsUsingDmaap: derived_from: dcae.nodes.DockerContainerForComponents properties: streams_publishes: description: > List of DMaaP streams used for publishing. Message router items look like: name: topic00 location: mtc5 client_role: XXXX type: message_router Data router items look like: name: feed00 location: mtc5 type: data_router This information is forwarded to the dmaap plugin to provision default: [] streams_subscribes: description: > List of DMaaP streams used for subscribing. Message router items look like: name: topic00 location: mtc5 client_role: XXXX type: message_router Data router items look like: name: feed00 location: mtc5 type: data_router username: king password: 123456 route: some-path scheme: https Note that username and password is optional. If not provided or null then the plugin will generate them. default: [] interfaces: cloudify.interfaces.lifecycle: create: # Generate service component name and populate config into Consul implementation: docker.dockerplugin.create_for_components_with_streams start: # Create Docker container and start implementation: docker.dockerplugin.create_and_start_container_for_components_with_streams # DockerContainerForPlatforms is intended for DCAE platform services. Unlike the components, # platform services have well-known names and well-known ports. dcae.nodes.DockerContainerForPlatforms: derived_from: cloudify.nodes.Root properties: name: description: > Container name used to register with Consul application_config: default: {} description: > Application configuration for this Docker component. The data strcture is expected to be a complex map (native YAML) and to be constructed and filled by the creator of the blueprint. docker_config: default: {} description: > This is what is the auxilary portion of the component spec that contains things like healthcheck definitions for the Docker component. Health checks are optional. image: type: string description: Full uri of the Docker image host_port: type: integer description: > Network port that the platform service is expecting to expose on the host default: 0 container_port: type: integer description: > Network port that the platform service exposes in the container default: 0 # The following properties are copied from k8s node type to be consistent. # However, these properties are not currently being used within the docker # plugin. msb_registration: type: dcae.types.MSBRegistration description: > Information for registering with MSB required: false log_info: type: dcae.types.LoggingInfo description: > Information for setting up centralized logging via ELK. required: false replicas: type: integer description: > The number of instances of the component that should be launched initially default: 1 always_pull_image: type: boolean description: > Set to true if the orchestrator should always pull a new copy of the image before deploying. By default the orchestrator pulls only if the image is not already present on the Docker host where the container is being launched. default: false interfaces: cloudify.interfaces.lifecycle: create: # Populate config into Consul implementation: docker.dockerplugin.create_for_platforms start: # Create Docker container and start implementation: docker.dockerplugin.create_and_start_container_for_platforms stop: # Stop and remove Docker container implementation: docker.dockerplugin.stop_and_remove_container delete: # Delete configuration from Consul implementation: docker.dockerplugin.cleanup_discovery # DockerContainer is intended to be more of an all-purpose Docker container node # for non-componentized applications. dcae.nodes.DockerContainer: derived_from: cloudify.nodes.Root properties: name: type: string description: Name of the Docker container to be given image: type: string description: Full uri of the Docker image interfaces: cloudify.interfaces.lifecycle: start: # Create Docker container and start implementation: docker.dockerplugin.create_and_start_container stop: # Stop and remove Docker container implementation: docker.dockerplugin.stop_and_remove_container # TODO: Revisit using Docker swarm # The DockerSwarm node type provides the connection information of an available Docker swarm # cluster to be used to run Docker containers given search contraints like location. # This node type is not responsible for instantiating and managing the Docker swarm clusters. # The DockerHost node is responsible for selecting a pre-existing Docker host to run # Docker containers on. It is not responsible for instantiating new Docker hosts or expanding # more resources. dcae.nodes.SelectedDockerHost: derived_from: cloudify.nodes.Root properties: location_id: type: string description: Location id of the Docker host to use name_search: type: string description: String to use when matching for names default: component-dockerhost # REVIEW: This field should really be optional but because there's no functionality # that provides the dynamic solution sought after yet, it has been promoted to be # required. docker_host_override: type: string description: Docker hostname here is used as a manual override default: Null interfaces: cloudify.interfaces.lifecycle: create: # Provide the Docker host to use for containers implementation: docker.dockerplugin.select_docker_host delete: implementation: docker.dockerplugin.unselect_docker_host