| 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 } |
| |