tosca_definitions_version: cloudify_dsl_1_3 description: > This example deploys the OOM Message Router application. Each service/deployment pair is associated with a single Kubernetes node. Node template naming convention: PROVISIONINGAPI_RESOURCETYPE_APPLICATIONCOMPONENT The following resources are created: - Security Group - openstack_port_zookeeper - NIC that connects to the Openstack Server - openstack_port_kafka - NIC that connects to the Openstack Server - openstack_port_dmaap - NIC that connects to the Openstack Server - openstack_server_zookeeper - a VM that a Kubernetes Node is installed on. - openstack_server_kafka - a VM that a Kubernetes Node is installed on. - openstack_server_dmaap - a VM that a Kubernetes Node is installed on. - kubernetes_node_zookeeper - a Kubernetes node that will join the Kubernetes cluster. - kubernetes_node_kafka - a Kubernetes node that will join the Kubernetes cluster. - kubernetes_node_dmaap - a Kubernetes node that will join the Kubernetes cluster. - kubernetes_deployment_zookeeper - a Kubernetes deployment. - kubernetes_deployment_kafka - a Kubernetes deployment. - kubernetes_deployment_dmaap - a Kubernetes deployment. - kubernetes_service_zookeeper - a Kubernetes service. - kubernetes_service_kafka - a Kubernetes service. - kubernetes_service_dmaap - a Kubernetes service. The following pre-setup steps are assumed, but not required: - Create Cloudify Example Environment: https://github.com/cloudify-examples/cloudify-environment-setup. - Create Kubernetes Cluster: https://github.com/cloudify-examples/simple-kubernetes-blueprint. imports: - https://raw.githubusercontent.com/cloudify-cosmo/cloudify-manager/4.1/resources/rest-service/cloudify/types/types.yaml # Plugin required: https://github.com/cloudify-cosmo/cloudify-openstack-plugin/releases/download/2.2.0/cloudify_openstack_plugin-2.2.0-py27-none-linux_x86_64-centos-Core.wgn - https://raw.githubusercontent.com/cloudify-cosmo/cloudify-openstack-plugin/2.2.0/plugin.yaml # Plugin required: https://github.com/cloudify-incubator/cloudify-utilities-plugin/releases/download/1.2.5/cloudify_utilities_plugin-1.2.5-py27-none-linux_x86_64-centos-Core.wgn - https://raw.githubusercontent.com/cloudify-incubator/cloudify-utilities-plugin/1.2.5/plugin.yaml # Plugin required: https://github.com/cloudify-incubator/cloudify-kubernetes-plugin/releases/download/1.2.0/cloudify_kubernetes_plugin-1.2.0-py27-none-linux_x86_64-centos-Core.wgn - https://raw.githubusercontent.com/cloudify-incubator/cloudify-kubernetes-plugin/1.2.0/plugin.yaml # Plugin required: http://repository.cloudifysource.org/cloudify/wagons/cloudify-diamond-plugin/1.3.5/cloudify_diamond_plugin-1.3.5-py27-none-linux_x86_64-centos-Core.wgn - https://raw.githubusercontent.com/cloudify-cosmo/cloudify-diamond-plugin/1.3.5/plugin.yaml # Plugin required: http://repository.cloudifysource.org/cloudify/wagons/cloudify-fabric-plugin/1.5/cloudify_fabric_plugin-1.5-py27-none-linux_x86_64-centos-Core.wgn - https://raw.githubusercontent.com/cloudify-cosmo/cloudify-fabric-plugin/1.5/plugin.yaml - cloudify/types/kubernetes.yaml inputs: configuration_file_content: type: string NS: default: oom image: description: Image to be used when launching agent VMs default: { get_secret: centos_core_image } flavor: description: Flavor of the agent VMs default: { get_secret: large_image_flavor } agent_user: description: > User for connecting to agent VMs default: centos app_name: default: message-router security_group: default: { concat: [ 'secgrp_', { get_input: app_name } ] } dsl_definitions: openstack_config: &openstack_config username: { get_secret: keystone_username } password: { get_secret: keystone_password } tenant_name: { get_secret: keystone_tenant_name } auth_url: { get_secret: keystone_url } region: { get_secret: region } groups: openstack_server_port_group_zookeeper: members: - openstack_server_zookeeper - openstack_port_zookeeper openstack_server_port_group_kafka: members: - openstack_server_kafka - openstack_port_kafka openstack_server_port_group_dmaap: members: - openstack_server_dmaap - openstack_port_dmaap policies: openstack_server_port_policies_scaling: type: cloudify.policies.scaling properties: default_instances: 1 targets: - openstack_server_port_group_zookeeper - openstack_server_port_group_kafka - openstack_server_port_group_dmaap node_templates: kubernetes_service_zookeeper: type: cloudify.kubernetes.resources.Service properties: definition: apiVersion: v1 kind: Service metadata: name: zookeeper labels: app: zookeeper spec: ports: - name: zookeeper1 port: 2181 selector: app: zookeeper clusterIP: None relationships: - type: cloudify.kubernetes.relationships.managed_by_master target: k8s - type: cloudify.relationships.depends_on target: kubernetes_deployment_zookeeper kubernetes_deployment_zookeeper: type: cloudify.kubernetes.resources.Deployment properties: definition: file: resource_path: kubernetes/message-router/message-router-zookeeper.yaml relationships: - type: cloudify.kubernetes.relationships.managed_by_master target: k8s - type: cloudify.relationships.depends_on target: kubernetes_node_zookeeper kubernetes_node_zookeeper: type: cloudify.nodes.Kubernetes.Node relationships: - type: cloudify.relationships.contained_in target: openstack_server_zookeeper interfaces: cloudify.interfaces.lifecycle: start: implementation: fabric.fabric_plugin.tasks.run_task inputs: task_properties: hostname: { get_attribute: [ SELF, hostname ] } labels: app: zookeeper openstack_server_zookeeper: type: cloudify.openstack.nodes.Server properties: &openstack_server_properties openstack_config: *openstack_config agent_config: user: { get_input: agent_user } install_method: remote port: 22 key: { get_secret: agent_key_private } server: key_name: '' image: '' flavor: '' management_network_name: { get_property: [ private_network, resource_id ] } relationships: - type: cloudify.relationships.contained_in target: k8s_node_scaling_tier - target: openstack_port_zookeeper type: cloudify.openstack.server_connected_to_port - type: cloudify.relationships.depends_on target: cloud_init_openstack_server interfaces: &openstack_server_interfaces cloudify.interfaces.lifecycle: create: inputs: args: image: { get_input: image } flavor: { get_input: flavor } userdata: { get_attribute: [ cloud_init_openstack_server, cloud_config ] } cloudify.interfaces.monitoring_agent: install: implementation: diamond.diamond_agent.tasks.install inputs: diamond_config: interval: 1 start: diamond.diamond_agent.tasks.start stop: diamond.diamond_agent.tasks.stop uninstall: diamond.diamond_agent.tasks.uninstall cloudify.interfaces.monitoring: start: implementation: diamond.diamond_agent.tasks.add_collectors inputs: collectors_config: CPUCollector: {} MemoryCollector: {} LoadAverageCollector: {} DiskUsageCollector: config: devices: x?vd[a-z]+[0-9]*$ NetworkCollector: {} ProcessResourcesCollector: config: enabled: true unit: B measure_collector_time: true cpu_interval: 0.5 process: hyperkube: name: hyperkube openstack_port_zookeeper: type: cloudify.openstack.nodes.Port properties: openstack_config: *openstack_config relationships: &openstack_port_relationships - type: cloudify.relationships.contained_in target: k8s_node_scaling_tier - type: cloudify.relationships.connected_to target: private_network - type: cloudify.relationships.depends_on target: private_subnet - type: cloudify.openstack.port_connected_to_security_group target: security_group kubernetes_service_kafka: type: cloudify.kubernetes.resources.Service properties: definition: apiVersion: v1 kind: Service metadata: name: global-kafka labels: app: global-kafka spec: ports: - name: kafka1 port: 9092 selector: app: global-kafka clusterIP: None relationships: - type: cloudify.kubernetes.relationships.managed_by_master target: k8s - type: cloudify.relationships.depends_on target: kubernetes_deployment_kafka kubernetes_deployment_kafka: type: cloudify.kubernetes.resources.Deployment properties: definition: file: resource_path: kubernetes/message-router/message-router-kafka.yaml relationships: - type: cloudify.kubernetes.relationships.managed_by_master target: k8s - type: cloudify.relationships.depends_on target: kubernetes_node_kafka - type: cloudify.relationships.depends_on target: kubernetes_deployment_zookeeper kubernetes_node_kafka: type: cloudify.nodes.Kubernetes.Node relationships: - type: cloudify.relationships.contained_in target: openstack_server_kafka interfaces: cloudify.interfaces.lifecycle: start: implementation: fabric.fabric_plugin.tasks.run_task inputs: task_properties: hostname: { get_attribute: [ SELF, hostname ] } labels: app: global-kafka openstack_server_kafka: type: cloudify.openstack.nodes.Server properties: *openstack_server_properties relationships: - type: cloudify.relationships.contained_in target: k8s_node_scaling_tier - target: openstack_port_kafka type: cloudify.openstack.server_connected_to_port - type: cloudify.relationships.depends_on target: cloud_init_openstack_server interfaces: *openstack_server_interfaces openstack_port_kafka: type: cloudify.openstack.nodes.Port properties: openstack_config: *openstack_config relationships: *openstack_port_relationships kubernetes_service_dmaap: type: cloudify.kubernetes.resources.Service properties: definition: apiVersion: v1 kind: Service metadata: name: dmaap labels: app: dmaap version: 1.0.0 spec: ports: - name: mr1 port: 3904 nodePort: 30227 - name: mr2 port: 3905 nodePort: 30226 selector: app: dmaap type: NodePort relationships: - type: cloudify.kubernetes.relationships.managed_by_master target: k8s - type: cloudify.relationships.depends_on target: kubernetes_deployment_dmaap kubernetes_deployment_dmaap: type: cloudify.kubernetes.resources.Deployment properties: definition: file: resource_path: kubernetes/message-router/message-router-dmaap.yaml relationships: - type: cloudify.kubernetes.relationships.managed_by_master target: k8s - type: cloudify.relationships.depends_on target: kubernetes_node_dmaap - type: cloudify.relationships.depends_on target: kubernetes_deployment_zookeeper kubernetes_node_dmaap: type: cloudify.nodes.Kubernetes.Node relationships: - type: cloudify.relationships.contained_in target: openstack_server_dmaap interfaces: cloudify.interfaces.lifecycle: start: implementation: fabric.fabric_plugin.tasks.run_task inputs: task_properties: hostname: { get_attribute: [ SELF, hostname ] } labels: app: global-dmaap openstack_server_dmaap: type: cloudify.openstack.nodes.Server properties: *openstack_server_properties relationships: - type: cloudify.relationships.contained_in target: k8s_node_scaling_tier - target: openstack_port_dmaap type: cloudify.openstack.server_connected_to_port - type: cloudify.relationships.depends_on target: cloud_init_openstack_server interfaces: *openstack_server_interfaces openstack_port_dmaap: type: cloudify.openstack.nodes.Port properties: openstack_config: *openstack_config relationships: *openstack_port_relationships security_group: type: cloudify.openstack.nodes.SecurityGroup properties: openstack_config: *openstack_config security_group: name: { get_input: security_group } description: kubernetes master security group rules: rules: - remote_ip_prefix: 0.0.0.0/0 port: 22 - remote_ip_prefix: 0.0.0.0/0 port: 53 - remote_ip_prefix: 0.0.0.0/0 port: 53 protocol: udp - remote_ip_prefix: 0.0.0.0/0 port: 80 - remote_ip_prefix: 0.0.0.0/0 port: 443 - remote_ip_prefix: 0.0.0.0/0 port: 2379 - remote_ip_prefix: 0.0.0.0/0 port: 4001 - remote_ip_prefix: 0.0.0.0/0 port: 4789 - remote_ip_prefix: 0.0.0.0/0 port: 6443 - remote_ip_prefix: 0.0.0.0/0 port: 6783 protocol: tcp - remote_ip_prefix: 0.0.0.0/0 port: 6783 protocol: udp - remote_ip_prefix: 0.0.0.0/0 port: 6784 protocol: tcp - remote_ip_prefix: 0.0.0.0/0 port: 6784 protocol: udp - remote_ip_prefix: 0.0.0.0/0 port: 8000 - remote_ip_prefix: 0.0.0.0/0 port: 8080 - remote_ip_prefix: 0.0.0.0/0 port: 9090 - remote_ip_prefix: 0.0.0.0/0 port: 10250 - remote_ip_prefix: 0.0.0.0/0 port: 2181 - remote_ip_prefix: 0.0.0.0/0 port: 9092 - remote_ip_prefix: 0.0.0.0/0 port: 3904 - remote_ip_prefix: 0.0.0.0/0 port: 30227 - remote_ip_prefix: 0.0.0.0/0 port: 3905 - remote_ip_prefix: 0.0.0.0/0 port: 30226 private_subnet: type: cloudify.openstack.nodes.Subnet properties: openstack_config: *openstack_config use_external_resource: true resource_id: { get_secret: private_subnet_name } relationships: - target: private_network type: cloudify.relationships.contained_in private_network: type: cloudify.openstack.nodes.Network properties: openstack_config: *openstack_config use_external_resource: true resource_id: { get_secret: private_network_name } external_network: type: cloudify.openstack.nodes.Network properties: openstack_config: *openstack_config use_external_resource: true resource_id: { get_secret: external_network_name } cloud_init_openstack_server: type: cloudify.nodes.CloudInit.CloudConfig properties: resource_config: groups: - docker users: - name: { get_input: agent_user } primary-group: wheel groups: docker shell: /bin/bash sudo: ['ALL=(ALL) NOPASSWD:ALL'] ssh-authorized-keys: - { get_secret: agent_key_public } write_files: - path: /etc/yum.repos.d/kubernetes.repo owner: root:root permissions: '0444' content: | # installed by cloud-init [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg packages: - [epel-release] - [gcc] - [python-dev] - [python-wheel] - [python-setuptools] - [libffi-devel] - [python-devel] - [openssl-devel] - [docker, 1.12.6-28.git1398f24.el7.centos] - [kubelet, 1.6.4-0] - [kubeadm, 1.6.4-0] - [kubectl, 1.6.4-0] - [kubernetes-cni, 0.5.1-0] - [git] - [wget] runcmd: - systemctl enable docker - systemctl start docker - systemctl enable kubelet - systemctl start kubelet - yum install -y python-pip - pip install --upgrade pip - pip install docker-compose - pip install backports.ssl_match_hostname --upgrade - mkdir -p /tmp/oom/ - git clone https://gerrit.onap.org/r/oom.git /tmp/oom - sleep 15 - chmod 755 /tmp/oom/kubernetes/config/docker/init/src/config/message-router/dcae-startup-vm-message-router/deploy.sh - sed -i -e "s/\.\/docker_files/\/tmp\/oom\/kubernetes\/config\/docker\/init\/src\/config\/message-router\/dcae-startup-vm-message-router\/docker_files/g" /tmp/oom/kubernetes/config/docker/init/src/config/message-router/dcae-startup-vm-message-router/deploy.sh - sed -i -e "s/\/opt\/docker\/docker-compose/\/bin\/docker-compose/g" /tmp/oom/kubernetes/config/docker/init/src/config/message-router/dcae-startup-vm-message-router/deploy.sh - mv /tmp/oom/kubernetes/config/docker/init/src/config/message-router/dcae-startup-vm-message-router/docker_files/__docker-compose.yml /tmp/oom/kubernetes/config/docker/init/src/config/message-router/dcae-startup-vm-message-router/docker_files/docker-compose.yml - mv /tmp/oom/kubernetes/config/docker/init/src/config/message-router/dcae-startup-vm-message-router/docker_files/__MsgRtrApi.properties /tmp/oom/kubernetes/config/docker/init/src/config/message-router/dcae-startup-vm-message-router/docker_files/MsgRtrApi.properties - sh -c /tmp/oom/kubernetes/config/docker/init/src/config/message-router/dcae-startup-vm-message-router/deploy.sh k8s_node_scaling_tier: type: cloudify.nodes.Root k8s: type: cloudify.kubernetes.nodes.Master properties: configuration: file_content: { get_input: configuration_file_content }