# ================================================================================ # Copyright (c) 2017-2020 AT&T Intellectual Property. All rights reserved. # Copyright (c) 2020 Pantheon.tech. All rights reserved. # Copyright (c) 2020-2021 Nokia. All rights reserved. # Copyright (c) 2020 J. F. Lucas. 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========================================================= # tosca_definitions_version: cloudify_dsl_1_3 plugins: k8s: executor: 'central_deployment_agent' package_name: k8splugin package_version: 3.5.3 data_types: 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 dcae.types.TLSInfo: description: > Information for using TLS (HTTPS). (The properties all have to be declared as not required, otherwise the tls_info property on the node would also be required.) properties: cert_directory: description: > The path in the container where the component expects to find TLS-related data. type: string required: false use_tls: description: > Flag indicating whether TLS (HTTPS) is to be used type: boolean required: false dcae.types.ExternalCertParameters: description: > Certificate parameters for external TLS info properties: common_name: description: > Common name which should be present in certificate type: string required: false default: "" sans: description: > List of Subject Alternative Names (SANs) which should be present in certificate type: string required: false default: "" dcae.types.ExternalTLSInfo: description: > Information for using external TLS. properties: external_cert_directory: description: > The path in the container where the component expects to find TLS-related data. type: string required: false default: "/opt/app/dcae-certificate/external" use_external_tls: description: > Flag indicating whether external TLS is to be used type: boolean required: false default: false ca_name: description: > Name of Certificate Authority configured on CertService side type: string required: false default: "RA" cert_type: description: > Type of output certificates type: string required: false default: "P12" external_certificate_parameters: description: > Certificate parameters for external TLS info type: dcae.types.ExternalCertParameters required: false node_types: dcae.nodes.ContainerizedComponent: # Base type for all containerized components # Captures common properties and interfaces derived_from: cloudify.nodes.Root properties: image: type: string description: Full uri of the Docker image application_config: default: {} description: > Application configuration for this component. The data structure 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: > Copied from the auxiliary portion of the component spec that contains things like healthcheck definitions for the component. Health checks are optional. resource_config: default: {} description: > This is used to specify the cpu and memory request and limit for container. Please specify "requests" property and/or a "limits" property, with subproproperties for cpu and memory. (https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/) log_info: type: dcae.types.LoggingInfo description: > Information for setting up centralized logging via ELK. required: false tls_info: type: dcae.types.TLSInfo description: > Information for setting up TLS (HTTPS). required: false external_cert: type: dcae.types.ExternalTLSInfo description: > Information for setting up external TLS 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 host where the container is being launched. default: false location_id: type: string description: > The identifier for the location where the component is to be deployed. If absent, the plugin uses its configured default location, typically the location where the plugin is running (the central site). Also used to supply a location to the DMaaP bus controller if the component is being provisioned as a publisher or subscriber to a DMaaP feed or topic. required: false interfaces: dcae.interfaces.update: scale: implementation: k8s.k8splugin.scale update_image: implementation: k8s.k8splugin.update_image # The ContainerizedServiceComponent node type is to be used for DCAE service components. # # The plugin deploys the component into a Kubernetes cluster with a very specific choice # of Kubernetes elements that are deliberately not under the control of the blueprint author. # The idea is to deploy all service components in a consistent way, with the details abstracted # away from the blueprint author. The plugin is responsible for: # * Generation of the service component name # * Managing of service component configuration information dcae.nodes.ContainerizedServiceComponent: derived_from: dcae.nodes.ContainerizedComponent 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. Not used by the plugin. Here for backward compatibility. default: Null required: False service_component_name_override: type: string description: > Manually override and set the name for this component. If this is set, then the name will not be auto-generated. Using this feature provides a service component with a fixed name that's known in advance, but care must be taken to avoid attempting to deploy two components with the same name. If the component exposes any ports, the k8s Service created by the plugin will use service_component_name_override as the DNS host name. default: Null interfaces: cloudify.interfaces.lifecycle: create: # Generate service component name and populate config into Consul implementation: k8s.k8splugin.create_for_components start: # Create k8s entities for the component and start implementation: k8s.k8splugin.create_and_start_container_for_components stop: # Stop and remove k8s entities associated with the component implementation: k8s.k8splugin.stop_and_remove_container delete: # Delete configuration from Consul implementation: k8s.k8splugin.cleanup_discovery dcae.interfaces.policy: # This is to be invoked by the policy handler upon policy updates policy_update: implementation: k8s.k8splugin.policy_update # This node type is intended for DCAE service components that use DMaaP and must use the # DMaaP plugin. dcae.nodes.ContainerizedServiceComponentUsingDmaap: derived_from: dcae.nodes.ContainerizedServiceComponent 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, populate config into Consul, set up runtime properties for DMaaP plugin implementation: k8s.k8splugin.create_for_components_with_streams # ContainerizedApplication is intended to be more of an all-purpose Docker container node # for non-componentized applications. dcae.nodes.ContainerizedApplication: 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: k8s.k8splugin.create_and_start_container stop: # Stop and remove Docker container implementation: k8s.k8splugin.stop_and_remove_container dcae.interfaces.scale: scale: implementation: k8s.k8splugin.scale dcae.interfaces.update: update_image: implementation: k8s.k8splugin.update_image