diff options
42 files changed, 925 insertions, 11 deletions
diff --git a/cloudify/inputs/message-router-blueprint.yaml.example b/cloudify/inputs/message-router-blueprint.yaml.example new file mode 100644 index 0000000000..ecab0eca2c --- /dev/null +++ b/cloudify/inputs/message-router-blueprint.yaml.example @@ -0,0 +1,25 @@ +join_command: kubeadm join --token f66aad.cb001cc90bd69b38 192.168.120.6:6443 +kubernetes_master_ip: 192.168.120.6 +flavor: 3 +configuration_file_content: + apiVersion: v1 + clusters: + - cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRFM01EZ3dNekEzTXpJek4xb1hEVEkzTURnd01UQTNNekl6TjFvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTUF4Ckxzdmkyek1ZU0pjaG5QWjVDUkJQTnBLbklHTDlHY1FYRFZnQjNEc0FuaTVpc2VadDlmeENtOURxSS94NkkrRGoKSlA5ZkNNbEo5a3Z1OGgvZFF4dWJFbHhaSmZkdkFqY3p0RlVWdGpaVGREcTFDTk81UENOcnNRSkdQVS9HWDNzagpRWmlHYVNPYmJJOGQ0d2Z0bkI5dE51ZDNXMnZDZmZJUzNCNU9YMVRVMzBjVE1xVnJjZ0FLT2EvR2FUK01WV3c2CkVHZDErWmVoYWZBUWJDeG1jbHRpMlJHSUNVakpLc2xqUFRUS3JTNXJVMkwxUjdYSFd3SUhyWWtuZ05SQllwTkQKaXk3UjlCZy93S1dkMVNYVVpUODU3eE8xdjB0aU9ucFJML0tGS2IrcHBKUnVITDVORE9TbTJZSzR1OFI3MjFudgpyYVNOSTk2K0VoVGhWL2U4VWU4Q0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFFOUFhbWQzL0JmRVAyRitSeXJRdXp2TGQzSWEKbGZoR3Fab1JqZWFId1pnanVwQVh0VXdzd0JiYkFhZm5XMXJDd3VDVldRYXVYVWhyZ1VNelcvbEQ2blBYYWtUcgpwWTJ6NG83ZG90dlZSekVtN0dmWllMUUs2cW9Wczk4TTRjS3RhdjVlL3VVcXFGckY2NVYzUE1QV3M1NGp2Q1U5CklFTDJ0ZmQ1TzFrMGlEcXFtdWdBVjgxblNOdHlnK0FZN3o5SVdXRFhKcTNUQ1RHQnZLQmxCdzNWSDVBbnQxblEKSFNrSmJ0ZGhpaFA0KzU0emlKZEhPNFcxekFGam4zUVpIZVZDNU8rSkdSOWNZWW5aTHc4ZC92YmxZeXRpTWZPVwoyN3VzcW1RbmtPZDliNXozaTlvRDBvUUYyY1RObk85NzJkeTBuTmhiK0VMclpGNEpKUS9XVjB0Z083ST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + server: https://192.168.120.6:6443 + name: kubernetes + contexts: + - context: + cluster: kubernetes + user: kubernetes-admin + name: kubernetes-admin@kubernetes + current-context: kubernetes-admin@kubernetes + kind: Config + preferences: {} + users: + - name: kubernetes-admin + user: + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQWRxZ0F3SUJBZ0lJSm9EQWNpYWVkSVF3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB4TnpBNE1ETXdOek15TXpkYUZ3MHhPREE0TURNd056TXlNemxhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW1xd3duNlU0TFVFQkphMWUKQzIrUjM0K0oyZ3BBYTJ0aDVOZXdnS2NhUWQwaE5BODNjNE1IMDFVUjU3b3ByNUNFczFQVmVwMkZtczlpaFRITwo0SUpINjkxUVQvTUVJZE5iWTl0RXdDV21ia1lMbFBjc09yclErYTl5VGdxYm5IWjBONnJOdUZ4dDB2alRPSUR1CmRDMnBQR3dFMW5kaHd1VVB3UUFxeS9SVjN6MTgzRnoyOWZuVHg3UXdWR0J4Rk84Z0JxRTFRYTVYenhIZ0lTQ2sKSkJka2FtRUFhSjl6NHgwZjFmbHQ4MG4wZ3RHRitkbUZuMThkbGwzZmoreGpNOGxqS21QZnRNdlc4MXF0bkVnZApoU1I3bWdMODlUckx3SmFtNkxmVmZhN29CWWJvWUMyT2gvKytZMkpwOXRpRkMyZ1ExeVBXSHJBMVZJTVBQUWdkCk8yTGNuUUlEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIZ2ZjRVd6R08yQ1p0cEJFbUxzbllXWTJmdGlSOU1BNHY5OQpXVFhBUzNzZ3VJTm43WktUUElSeTVyTmVmSTVhS1ltMWMyU0w5ZzJlM0JpeFZUUHRsYmRWczVBanMxWnVWRGRkClhmYk93blozcnBQbDZoenpxSVh2VmxsNzI4VC9hZDRJbmZ6SFVtT1o3YSs4enBIUS9EREZKLzR1aDYrSVlnSFkKVzBBQmFXMXpOc3lQSzNhK3paV0ROSVFvNS8yTVFJYkNwN1ZQOHhobUUxZ1diY1BxVmJ1YVZJY09IZjkvUVhqeQpKZTdoK2tzSEJPNUFZczRZOFZBYXlVb0t4bTJZbmNkZHJGTWl4STRKNEkrSUp5aGRPdE5TNG1lTmcyMXIwN3U2ClZkL2E2SGt6ekxFcmdqWkxzVktIK0RUMTVhTWNSZGg3OVE1YXo1ckh1Qm5vZ0RYejFtVT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBbXF3d242VTRMVUVCSmExZUMyK1IzNCtKMmdwQWEydGg1TmV3Z0tjYVFkMGhOQTgzCmM0TUgwMVVSNTdvcHI1Q0VzMVBWZXAyRm1zOWloVEhPNElKSDY5MVFUL01FSWROYlk5dEV3Q1dtYmtZTGxQY3MKT3JyUSthOXlUZ3FibkhaME42ck51Rnh0MHZqVE9JRHVkQzJwUEd3RTFuZGh3dVVQd1FBcXkvUlYzejE4M0Z6Mgo5Zm5UeDdRd1ZHQnhGTzhnQnFFMVFhNVh6eEhnSVNDa0pCZGthbUVBYUo5ejR4MGYxZmx0ODBuMGd0R0YrZG1GCm4xOGRsbDNmait4ak04bGpLbVBmdE12VzgxcXRuRWdkaFNSN21nTDg5VHJMd0phbTZMZlZmYTdvQllib1lDMk8KaC8rK1kySnA5dGlGQzJnUTF5UFdIckExVklNUFBRZ2RPMkxjblFJREFRQUJBb0lCQUhxbjMrdEo5ekdUNGhnQgowcGxaQWFINnp3TzBxMzlENlo2ekdNbjlPY3BQVkp4WEVNOHVjbzg1WC9pV1hhWlhBWlMvLzRPNzFRNStOUStRCi94QjA0Qm9BS0VjdVhQR0NEWEF6bXVLUk9Oa3IvTlZGNmJJdElibFBVMkxsOEo3MEpKZGNnTVVacnhIbHRvS1IKWkFlSGlqUmJLTDcyYnZWQjl1dERlYXpCZHpPTzhHbG5VaU5WTWRoaVowazRNbEFobmV0ZjNNazFHbXFjbHJyNApISjIwbElSR2NWTWRqZm1OaThFVG5LckRwWWNvRUZ5QnozMVN2RHVTaU1GVm9sUWpZMkU1N2kyd1RVdDlSU1NjCk5oRlpEM2s1dkxwMFNIcjZtSXRURW1jY0w2VDdzTDh0UXNGLzhaZG9aUXpoRzRXUU5IZ00yUldsdEN4eklCNy8KT3czUk5OVUNnWUVBelcvNVdkWk5QV2hsRXR2VGQ4a1FjbUF3VkVYaGgrU2NvajhpVGdHbW5GNXhsSGhWVjZUdwpVYzRtRmhGU0JBSGpRWlN5Vm1NTDkwMWU1UE1aOXVRQ05Xb0pWVzU4cUI0VDJsRXNKRjJkdXdRSVZDL2g4QkhiClJ4TVZLaDJhdHZKR2dHbWsxME5tblZTYmxQVVpDVVBRWFN4R1B5VXh0UStSSmRUNHVPSm43QXNDZ1lFQXdMMnIKNUlQeFRvTHplZ254b0I5Z0RnbnFBazB3b3NicHg3V2pJY2RpdnlWNGpib2U3TmlYbEpQZXJ3MmExd2M2Ky96VgpSeVpkUjN2U1lrUnczNnp4Q1N0UHZhRFVMT053eDhtSjVRVVIwYXdReEQ4R1ZneHZmVTBhYzdqeW04L2laZWpjCkk5V1UxOXo0eEk3akIvMXNYOFpFTWFtb1RXOGVUM0I4aWNPUEd2Y0NnWUVBcWtOZmVlRnU2cklXOHVaV0FUVVcKK0hSWUdjQkJCd3VsOWFJMW9Fa2wrUHNkVDF2Yi8yT24rV1RObEFTTzROdGZxZjYvUDNHZmZUc1dwdElFZHViSwpIZExnSVhvTXZwa1BBeVc3Vy9ocXZaQytCbWdZN1lzZkhXem5ZWnhmbWJoNlRmdEFyMWdoTjh2amxqVDhwdjBaCk45OTE2T2UrcHIxY0l1cTdxUitiMmJrQ2dZQUxMYlQvZnV1SzZ5dGw0NWZBK3JEZWY1S3o2WGd0cUsyOGFIdDYKcFE3RUdVOUJvUTdVRzhmRzFVQ3dGSERya2I3SkNLUHlDWGFWZzhmeTdSZEMwY3YxQlM4Tngzc20wMVlpTUQwdwpMRGdaV2dwcTUyRGRzc0R3bW4welF3SEhLYXB1MEsrYjRISk9oc0ZpM1FxcjF2WG5KQittWmJtZUxCaXM4TkE0ClNVQk9od0tCZ0drTkJhaTFWVU9RaGVYU3Mrb3JPVWxDNDNsenlBanJZa2dod0lRd25LTWpqK2lrak9oNmtqc3IKL1lDTHVRcWNBYWNKVEF2VmZOVGcyZldyUUJTODlwVjlFRVBnV0JIQmt4a1JsNnY0WTFQZVRqOVVzeVdzaHljYQpXRkFHSkpDMXg1NWg2OWdFWSsyR1NpUEQ0MzNrQUZUd3NBUEhPbmRwdmlOTVBLek9KTldnCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg== + + diff --git a/cloudify/scripts/configure_node.py b/cloudify/scripts/configure_node.py new file mode 100644 index 0000000000..9cfa206b54 --- /dev/null +++ b/cloudify/scripts/configure_node.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python + +import subprocess +from cloudify import ctx +from cloudify.state import ctx_parameters as inputs + + +def execute_command(_command): + + ctx.logger.debug('_command {0}.'.format(_command)) + + subprocess_args = { + 'args': _command.split(), + 'stdout': subprocess.PIPE, + 'stderr': subprocess.PIPE + } + + ctx.logger.debug('subprocess_args {0}.'.format(subprocess_args)) + + process = subprocess.Popen(**subprocess_args) + output, error = process.communicate() + + ctx.logger.debug('command: {0} '.format(_command)) + ctx.logger.debug('output: {0} '.format(output)) + ctx.logger.debug('error: {0} '.format(error)) + ctx.logger.debug('process.returncode: {0} '.format(process.returncode)) + + if process.returncode: + ctx.logger.error('Running `{0}` returns error.'.format(_command)) + return False + + return output + + +if __name__ == '__main__': + + join_command = inputs['join_command'] + join_command = 'sudo {0} --skip-preflight-checks'.format(join_command) + execute_command(join_command) + + # Install weave-related utils + execute_command('sudo curl -L git.io/weave -o /usr/local/bin/weave') + execute_command('sudo chmod a+x /usr/local/bin/weave') + execute_command('sudo curl -L git.io/scope -o /usr/local/bin/scope') + execute_command('sudo chmod a+x /usr/local/bin/scope') + execute_command('/usr/local/bin/scope launch') + + hostname = execute_command('hostname') + ctx.instance.runtime_properties['hostname'] = hostname.rstrip('\n') diff --git a/cloudify/scripts/create.py b/cloudify/scripts/create.py new file mode 100644 index 0000000000..eb362a4558 --- /dev/null +++ b/cloudify/scripts/create.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python + +import subprocess +from cloudify import ctx +from cloudify.exceptions import OperationRetry + + +def check_command(command): + + try: + process = subprocess.Popen( + command.split() + ) + except OSError: + return False + + output, error = process.communicate() + + ctx.logger.debug('command: {0} '.format(command)) + ctx.logger.debug('output: {0} '.format(output)) + ctx.logger.debug('error: {0} '.format(error)) + ctx.logger.debug('process.returncode: {0} '.format(process.returncode)) + + if process.returncode: + ctx.logger.error('Running `{0}` returns error.'.format(command)) + return False + + return True + + +def execute_command(_command): + + ctx.logger.debug('_command {0}.'.format(_command)) + + subprocess_args = { + 'args': _command.split(), + 'stdout': subprocess.PIPE, + 'stderr': subprocess.PIPE + } + + ctx.logger.debug('subprocess_args {0}.'.format(subprocess_args)) + + process = subprocess.Popen(**subprocess_args) + output, error = process.communicate() + + ctx.logger.debug('command: {0} '.format(_command)) + ctx.logger.debug('output: {0} '.format(output)) + ctx.logger.debug('error: {0} '.format(error)) + ctx.logger.debug('process.returncode: {0} '.format(process.returncode)) + + if process.returncode: + ctx.logger.error('Running `{0}` returns error.'.format(_command)) + return False + + return output + + +if __name__ == '__main__': + + docker_command = 'docker ps' + + if not check_command(docker_command): + raise OperationRetry('Waiting for docker to be installed.') + + finished = False + ps = execute_command('ps -ef') + for line in ps.split('\n'): + if '/usr/bin/python /usr/bin/cloud-init modules' in line: + ctx.logger.error('in line') + raise OperationRetry('Waiting for Cloud Init to finish.') + + ctx.logger.info('Docker is ready and Cloud Init finished.') diff --git a/cloudify/scripts/tasks.py b/cloudify/scripts/tasks.py new file mode 100644 index 0000000000..035a780cb3 --- /dev/null +++ b/cloudify/scripts/tasks.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from fabric.api import run + + +def label_node(labels, hostname): + if labels: + label_list = [] + for key, value in labels.items(): + label_pair_string = '%s=%s' % (key, value) + label_list.append(label_pair_string) + label_string = ' '.join(label_list) + command = 'kubectl label nodes %s %s' % (hostname, label_string) + run(command) + + +def stop_node(hostname): + command = 'kubectl drain %s' % (hostname) + run(command) + + +def delete_node(hostname): + command = 'kubectl delete no %s' % (hostname) + run(command) diff --git a/cloudify/types/kubernetes.yaml b/cloudify/types/kubernetes.yaml new file mode 100644 index 0000000000..1698aa210e --- /dev/null +++ b/cloudify/types/kubernetes.yaml @@ -0,0 +1,91 @@ +inputs: + + join_command: + type: string + + labels: + default: + app: { get_input: app_name } + + kubernetes_master_ip: + type: string + + kubernetes_master_agent_user: + default: { get_input: agent_user } + +node_types: + + cloudify.nodes.Kubernetes.Node: + derived_from: cloudify.nodes.Root + interfaces: + cloudify.interfaces.lifecycle: + create: + implementation: cloudify/scripts/create.py + configure: + implementation: cloudify/scripts/configure_node.py + inputs: + join_command: + default: { get_input: join_command } + start: + implementation: fabric.fabric_plugin.tasks.run_task + inputs: + tasks_file: + default: cloudify/scripts/tasks.py + task_name: + default: label_node + task_properties: + default: + hostname: { get_attribute: [ SELF, hostname ] } + labels: { get_input: labels } + fabric_env: + default: + host_string: { get_input: kubernetes_master_ip } + user: { get_input: kubernetes_master_agent_user } + key: { get_secret: agent_key_private } +# stop: +# implementation: fabric.fabric_plugin.tasks.run_task +# inputs: +# tasks_file: +# default: cloudify/scripts/tasks.py +# task_name: +# default: stop_node +# task_properties: +# default: +# hostname: { get_attribute: [ SELF, hostname ] } +# fabric_env: +# default: +# host_string: { get_input: kubernetes_master_ip } +# user: { get_input: kubernetes_master_agent_user } +# key: { get_secret: agent_key_private } + delete: + implementation: fabric.fabric_plugin.tasks.run_task + inputs: + tasks_file: + default: cloudify/scripts/tasks.py + task_name: + default: delete_node + task_properties: + default: + hostname: { get_attribute: [ SELF, hostname ] } + fabric_env: + default: + host_string: { get_input: kubernetes_master_ip } + user: { get_input: kubernetes_master_agent_user } + key: { get_secret: agent_key_private } + + cloudify.kubernetes.resources.Namespace: + derived_from: cloudify.kubernetes.resources.Main + properties: + _api_mapping: + default: + create: + api: CoreV1Api + method: create_namespace + payload: V1Namespace + read: + api: CoreV1Api + method: read_namespace + delete: + api: CoreV1Api + method: delete_namespace + payload: V1DeleteOptions diff --git a/kubernetes/aai/aai-deployment.yaml b/kubernetes/aai/aai-deployment.yaml index ccf5007de2..857044d0f3 100644 --- a/kubernetes/aai/aai-deployment.yaml +++ b/kubernetes/aai/aai-deployment.yaml @@ -85,3 +85,5 @@ spec: hostPath: path: /dockerdata-nfs/onapdemo/aai/aai-data/ restartPolicy: Always + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/aai/hbase-deployment.yaml b/kubernetes/aai/hbase-deployment.yaml index c2a96c9adf..d39d0c7459 100644 --- a/kubernetes/aai/hbase-deployment.yaml +++ b/kubernetes/aai/hbase-deployment.yaml @@ -30,3 +30,5 @@ spec: port: 8020 initialDelaySeconds: 5 periodSeconds: 10 + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/aai/modelloader-deployment.yaml b/kubernetes/aai/modelloader-deployment.yaml index 7eacf7c1c8..e649fc0565 100644 --- a/kubernetes/aai/modelloader-deployment.yaml +++ b/kubernetes/aai/modelloader-deployment.yaml @@ -93,3 +93,5 @@ spec: initialDelaySeconds: 5 periodSeconds: 10 restartPolicy: Always + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/appc/appc-deployment.yaml b/kubernetes/appc/appc-deployment.yaml index b0224d5ac0..e2f2b4ead4 100644 --- a/kubernetes/appc/appc-deployment.yaml +++ b/kubernetes/appc/appc-deployment.yaml @@ -72,3 +72,5 @@ spec: - name: sdnc-conf hostPath: path: /dockerdata-nfs/onapdemo/sdnc/conf + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/appc/db-deployment.yaml b/kubernetes/appc/db-deployment.yaml index 0af66cc91e..ee796faca3 100644 --- a/kubernetes/appc/db-deployment.yaml +++ b/kubernetes/appc/db-deployment.yaml @@ -34,3 +34,5 @@ spec: - name: appc-data hostPath: path: /dockerdata-nfs/onapdemo/appc/data + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/appc/dgbuilder-deployment.yaml b/kubernetes/appc/dgbuilder-deployment.yaml index 9122095f8c..de8149390c 100644 --- a/kubernetes/appc/dgbuilder-deployment.yaml +++ b/kubernetes/appc/dgbuilder-deployment.yaml @@ -62,3 +62,5 @@ spec: initialDelaySeconds: 5 periodSeconds: 10 restartPolicy: Always + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/message-router/message-router-dmaap.yaml b/kubernetes/message-router/message-router-dmaap.yaml index 5730a13b60..43c39cde8c 100644 --- a/kubernetes/message-router/message-router-dmaap.yaml +++ b/kubernetes/message-router/message-router-dmaap.yaml @@ -70,3 +70,5 @@ spec: - name: mykey hostPath: path: /dockerdata-nfs/onapdemo/message-router/dmaap/mykey + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/message-router/message-router-kafka.yaml b/kubernetes/message-router/message-router-kafka.yaml index d2f0bb0e4a..3a2b4f06a4 100644 --- a/kubernetes/message-router/message-router-kafka.yaml +++ b/kubernetes/message-router/message-router-kafka.yaml @@ -78,3 +78,5 @@ spec: - name: start-kafka hostPath: path: /dockerdata-nfs/onapdemo/message-router/dcae-startup-vm-message-router/docker_files/start-kafka.sh + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/message-router/message-router-zookeeper.yaml b/kubernetes/message-router/message-router-zookeeper.yaml index d5db00eb1b..aca4806595 100644 --- a/kubernetes/message-router/message-router-zookeeper.yaml +++ b/kubernetes/message-router/message-router-zookeeper.yaml @@ -31,3 +31,5 @@ spec: - name: zookeeper-data hostPath: path: /dockerdata-nfs/onapdemo/message-router/dcae-startup-vm-message-router/docker_files/data-zookeeper + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/mso/db-deployment.yaml b/kubernetes/mso/db-deployment.yaml index e7d81d93ee..f57f4bac87 100644 --- a/kubernetes/mso/db-deployment.yaml +++ b/kubernetes/mso/db-deployment.yaml @@ -45,3 +45,5 @@ spec: - name: mso-mariadb-docker-entrypoint-initdb hostPath: path: /dockerdata-nfs/onapdemo/mso/mariadb/docker-entrypoint-initdb.d + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/mso/mso-deployment.yaml b/kubernetes/mso/mso-deployment.yaml index 53f1e01e28..fb052df734 100644 --- a/kubernetes/mso/mso-deployment.yaml +++ b/kubernetes/mso/mso-deployment.yaml @@ -70,3 +70,5 @@ spec: - name: mso-docker-files hostPath: path: /dockerdata-nfs/onapdemo/mso/docker-files + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/oneclick/createAll.bash b/kubernetes/oneclick/createAll.bash index 6e62c6bec4..bc211eeb47 100755 --- a/kubernetes/oneclick/createAll.bash +++ b/kubernetes/oneclick/createAll.bash @@ -1,11 +1,14 @@ #!/bin/bash +. $(dirname "$0")/setenv.bash + usage() { cat <<EOF Usage: $0 [PARAMs] -u : Display usage -n [NAMESPACE] : Kubernetes namespace (required) -s false : Exclude services (default: true) +-i [INSTANCE] : ONAP deployment instance # (default: 1) -a [APP] : Specify a specific ONAP component (default: all) from the following choices: sdc, aai ,mso, message-router, robot, @@ -17,16 +20,27 @@ create_namespace() { kubectl create namespace $1-$2 } +create_registry_key() { + kubectl --namespace $1-$2 create secret docker-registry $3 --docker-server=$4 --docker-username=$5 --docker-password=$6 --docker-email=$7 +} + create_service() { + sed -i -- 's/nodePort: [0-9]\{2\}[02468]\{1\}/nodePort: '"$3"'/g' ../$2/all-services.yaml + sed -i -- 's/nodePort: [0-9]\{2\}[13579]\{1\}/nodePort: '"$4"'/g' ../$2/all-services.yaml kubectl --namespace $1-$2 create -f ../$2/all-services.yaml + mv ../$2/all-services.yaml-- ../$2/all-services.yaml } #MAINs NS= INCL_SVC=true APP= +INSTANCE=1 +MAX_INSTANCE=5 +DU=$ONAP_DOCKER_USER +DP=$ONAP_DOCKER_PASS -while getopts ":n:u:s:a:" PARAM; do +while getopts ":n:u:s:i:a:du:dp:" PARAM; do case $PARAM in u) usage @@ -38,6 +52,9 @@ while getopts ":n:u:s:a:" PARAM; do s) INCL_SVC=${OPTARG} ;; + i) + INSTANCE=${OPTARG} + ;; a) APP=${OPTARG} if [[ -z $APP ]]; then @@ -45,6 +62,12 @@ while getopts ":n:u:s:a:" PARAM; do exit 1 fi ;; + du) + DU=${OPTARG} + ;; + dp) + DP=${OPTARG} + ;; ?) usage exit @@ -59,8 +82,20 @@ fi if [[ ! -z "$APP" ]]; then ONAP_APPS=($APP) -else - ONAP_APPS=('sdc' 'aai' 'mso' 'message-router' 'robot' 'vid' 'sdnc' 'portal' 'policy' 'appc') +fi + +if [[ "$INCL_SVC" == true ]]; then + + if [ "$INSTANCE" -gt "$MAX_INSTANCE" ];then + printf "\n********** You choose to create ${INSTANCE}th instance of ONAP \n" + printf "\n********** Due to port allocation only ${MAX_INSTANCE} instances of ONAP is allowed per kubernetes deployment\n" + exit 1 + fi + + start=$((300+2*INSTANCE)) + end=$((start+1)) + printf "\n********** Creating instance ${INSTANCE} of ONAP with port range ${start}00 and ${end}99\n" + fi printf "\n********** Creating up ONAP: ${ONAP_APPS[*]}\n" @@ -71,7 +106,7 @@ for i in ${ONAP_APPS[@]}; do if [[ "$INCL_SVC" == true ]]; then printf "\nCreating services **********\n" - create_service $NS $i + create_service $NS $i $start $end fi printf "\n" @@ -79,7 +114,8 @@ done printf "\n\n********** Creating deployments for ${ONAP_APPS[*]} ********** \n" for i in ${ONAP_APPS[@]}; do + create_registry_key $NS $i $ONAP_DOCKER_REGISTRY_KEY $ONAP_DOCKER_REGISTRY $DU $DP $ONAP_DOCKER_MAIL /bin/bash $i.sh $NS $i 'create' done -printf "**** Done ****" +printf "\n**** Done ****\n" diff --git a/kubernetes/oneclick/deleteAll.bash b/kubernetes/oneclick/deleteAll.bash index 8d145f945a..3d54aa80ae 100755 --- a/kubernetes/oneclick/deleteAll.bash +++ b/kubernetes/oneclick/deleteAll.bash @@ -1,6 +1,19 @@ #!/bin/bash + +. $(dirname "$0")/setenv.bash + delete_namespace() { - kubectl delete namespace $1-$2 + _NS=$1-$2 + kubectl delete namespace $_NS + printf "Waiting for namespace $_NS termination...\n" + while kubectl get namespaces $_NS > /dev/null 2>&1; do + sleep 2 + done + printf "Namespace $_NS deleted.\n\n" +} + +delete_registry_key() { + kubectl --namespace $1-$2 delete secret onap-docker-registry-key } delete_service() { @@ -58,23 +71,21 @@ fi if [[ ! -z "$APP" ]]; then ONAP_APPS=($APP) -else - ONAP_APPS=('sdc' 'aai' 'mso' 'message-router' 'robot' 'vid' 'sdnc' 'portal' 'policy' 'appc') fi printf "\n********** Cleaning up ONAP: ${ONAP_APPS[*]}\n" for i in ${ONAP_APPS[@]}; do + # delete the deployments + /bin/bash $i.sh $NS $i 'delete' + if [[ "$INCL_SVC" == true ]]; then printf "\nDeleting services **********\n" delete_service $NS $i delete_namespace $NS $i fi - # delete the deployments - /bin/bash $i.sh $NS $i 'delete' - done diff --git a/kubernetes/oneclick/setenv.bash b/kubernetes/oneclick/setenv.bash new file mode 100644 index 0000000000..05a0d4760a --- /dev/null +++ b/kubernetes/oneclick/setenv.bash @@ -0,0 +1,8 @@ +#!/bin/bash + +ONAP_APPS=('sdc' 'aai' 'mso' 'message-router' 'robot' 'vid' 'sdnc' 'portal' 'policy' 'appc') +ONAP_DOCKER_REGISTRY_KEY=${ONAP_DOCKER_REGISTRY_KEY:-onap-docker-registry-key} +ONAP_DOCKER_REGISTRY=${ONAP_DOCKER_REGISTRY:-nexus3.onap.org:10001} +ONAP_DOCKER_USER=${ONAP_DOCKER_USER:-docker} +ONAP_DOCKER_PASS=${ONAP_DOCKER_PASS:-docker} +ONAP_DOCKER_MAIL=${ONAP_DOCKER_MAIL:-$USERNAME@$USERDOMAIN} diff --git a/kubernetes/policy/dep-brmsgw.yaml b/kubernetes/policy/dep-brmsgw.yaml index fc39fc3387..6758abf16a 100644 --- a/kubernetes/policy/dep-brmsgw.yaml +++ b/kubernetes/policy/dep-brmsgw.yaml @@ -61,3 +61,5 @@ spec: - name: pe hostPath: path: /dockerdata-nfs/onapdemo/policy/opt/policy/config/pe/ + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/policy/dep-drools.yaml b/kubernetes/policy/dep-drools.yaml index e32be052dc..fbc8e17601 100644 --- a/kubernetes/policy/dep-drools.yaml +++ b/kubernetes/policy/dep-drools.yaml @@ -75,3 +75,5 @@ spec: - name: drools hostPath: path: /dockerdata-nfs/onapdemo/policy/opt/policy/config/drools/ + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/policy/dep-maria.yaml b/kubernetes/policy/dep-maria.yaml index e9f4fa2e3f..21914c8657 100644 --- a/kubernetes/policy/dep-maria.yaml +++ b/kubernetes/policy/dep-maria.yaml @@ -27,3 +27,5 @@ spec: port: 3306 initialDelaySeconds: 5 periodSeconds: 10 + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/policy/dep-nexus.yaml b/kubernetes/policy/dep-nexus.yaml index 78eefe3c1c..48c289e3e1 100644 --- a/kubernetes/policy/dep-nexus.yaml +++ b/kubernetes/policy/dep-nexus.yaml @@ -45,3 +45,5 @@ spec: - bash -c "/opt/nexus/nexus-2.14.2-01/bin/nexus start && sleep 1000d" image: nexus3.onap.org:10001/openecomp/policy/policy-nexus:1.0-STAGING-latest name: nexus + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/policy/dep-pap.yaml b/kubernetes/policy/dep-pap.yaml index 0a9d0c2150..11420da525 100644 --- a/kubernetes/policy/dep-pap.yaml +++ b/kubernetes/policy/dep-pap.yaml @@ -85,3 +85,5 @@ spec: - name: pe hostPath: path: /dockerdata-nfs/onapdemo/policy/opt/policy/config/pe/ + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/policy/dep-pdp.yaml b/kubernetes/policy/dep-pdp.yaml index e3d65d4d20..0efe5c3773 100644 --- a/kubernetes/policy/dep-pdp.yaml +++ b/kubernetes/policy/dep-pdp.yaml @@ -64,3 +64,5 @@ spec: - name: pe hostPath: path: /dockerdata-nfs/onapdemo/policy/opt/policy/config/pe/ + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/policy/dep-pypdp.yaml b/kubernetes/policy/dep-pypdp.yaml index 860dfb1dbb..91d71d56e8 100644 --- a/kubernetes/policy/dep-pypdp.yaml +++ b/kubernetes/policy/dep-pypdp.yaml @@ -66,3 +66,5 @@ spec: - name: pe hostPath: path: /dockerdata-nfs/onapdemo/policy/opt/policy/config/pe/ + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/portal/portal-apps-deployment.yaml b/kubernetes/portal/portal-apps-deployment.yaml index 0d39e23960..39f32caa47 100755 --- a/kubernetes/portal/portal-apps-deployment.yaml +++ b/kubernetes/portal/portal-apps-deployment.yaml @@ -130,3 +130,5 @@ spec: - name: portal-root hostPath: path: /dockerdata-nfs/onapdemo/portal + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/portal/portal-mariadb-deployment.yaml b/kubernetes/portal/portal-mariadb-deployment.yaml index f25e65bef8..f1dae14017 100755 --- a/kubernetes/portal/portal-mariadb-deployment.yaml +++ b/kubernetes/portal/portal-mariadb-deployment.yaml @@ -35,3 +35,5 @@ spec: - name: portal-mariadb-data hostPath: path: /dockerdata-nfs/onapdemo/portal/mariadb/data + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/portal/portal-vnc-dep.yaml b/kubernetes/portal/portal-vnc-dep.yaml index 3ad51cca9f..7751eeeaab 100644 --- a/kubernetes/portal/portal-vnc-dep.yaml +++ b/kubernetes/portal/portal-vnc-dep.yaml @@ -127,3 +127,5 @@ spec: volumes: - name: ubuntu-init emptyDir: {} + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/robot/robot-deployment.yaml b/kubernetes/robot/robot-deployment.yaml index a29e611e5a..ade71472fa 100644 --- a/kubernetes/robot/robot-deployment.yaml +++ b/kubernetes/robot/robot-deployment.yaml @@ -49,3 +49,5 @@ spec: - name: lighttpd-authorization hostPath: path: /dockerdata-nfs/onapdemo/robot/authorization + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/sdc/sdc-be.yaml b/kubernetes/sdc/sdc-be.yaml index 964a2470af..f23db779ab 100644 --- a/kubernetes/sdc/sdc-be.yaml +++ b/kubernetes/sdc/sdc-be.yaml @@ -107,3 +107,5 @@ spec: - name: sdc-logs hostPath: path: /dockerdata-nfs/onapdemo/sdc/logs + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/sdc/sdc-cs.yaml b/kubernetes/sdc/sdc-cs.yaml index d9857634f1..74874f9c35 100644 --- a/kubernetes/sdc/sdc-cs.yaml +++ b/kubernetes/sdc/sdc-cs.yaml @@ -82,3 +82,5 @@ spec: - name: sdc-logs hostPath: path: /dockerdata-nfs/onapdemo/sdc/logs + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/sdc/sdc-es.yaml b/kubernetes/sdc/sdc-es.yaml index 78577eecdd..5176b93d21 100644 --- a/kubernetes/sdc/sdc-es.yaml +++ b/kubernetes/sdc/sdc-es.yaml @@ -56,3 +56,5 @@ spec: - name: sdc-logs hostPath: path: /dockerdata-nfs/onapdemo/sdc/logs + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/sdc/sdc-fe.yaml b/kubernetes/sdc/sdc-fe.yaml index 9ac835021f..d984bbedb8 100644 --- a/kubernetes/sdc/sdc-fe.yaml +++ b/kubernetes/sdc/sdc-fe.yaml @@ -96,3 +96,5 @@ spec: - name: sdc-fe-config hostPath: path: /dockerdata-nfs/onapdemo/sdc/sdc-fe/FE_2_setup_configuration.rb + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/sdc/sdc-kb.yaml b/kubernetes/sdc/sdc-kb.yaml index d39386b77b..b79f4ca17b 100644 --- a/kubernetes/sdc/sdc-kb.yaml +++ b/kubernetes/sdc/sdc-kb.yaml @@ -74,3 +74,5 @@ spec: - name: sdc-logs hostPath: path: /dockerdata-nfs/onapdemo/sdc/logs + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/sdnc/db-deployment.yaml b/kubernetes/sdnc/db-deployment.yaml index bb8fda5190..685edec242 100644 --- a/kubernetes/sdnc/db-deployment.yaml +++ b/kubernetes/sdnc/db-deployment.yaml @@ -34,3 +34,5 @@ spec: - name: sdnc-data hostPath: path: /dockerdata-nfs/onapdemo/sdnc/data + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/sdnc/dgbuilder-deployment.yaml b/kubernetes/sdnc/dgbuilder-deployment.yaml index 2e6c9a5ffc..13781ff939 100644 --- a/kubernetes/sdnc/dgbuilder-deployment.yaml +++ b/kubernetes/sdnc/dgbuilder-deployment.yaml @@ -60,3 +60,5 @@ spec: initialDelaySeconds: 5 periodSeconds: 10 restartPolicy: Always + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/sdnc/sdnc-deployment.yaml b/kubernetes/sdnc/sdnc-deployment.yaml index 50121bebb3..0dc48393e4 100644 --- a/kubernetes/sdnc/sdnc-deployment.yaml +++ b/kubernetes/sdnc/sdnc-deployment.yaml @@ -62,3 +62,5 @@ spec: - name: sdnc-conf hostPath: path: /dockerdata-nfs/onapdemo/sdnc/conf + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/sdnc/web-deployment.yaml b/kubernetes/sdnc/web-deployment.yaml index d1edb6f128..36df93beea 100644 --- a/kubernetes/sdnc/web-deployment.yaml +++ b/kubernetes/sdnc/web-deployment.yaml @@ -60,3 +60,5 @@ spec: initialDelaySeconds: 5 periodSeconds: 10 restartPolicy: Always + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/vid/vid-mariadb-deployment.yaml b/kubernetes/vid/vid-mariadb-deployment.yaml index f2e7927bef..93a798a04d 100644 --- a/kubernetes/vid/vid-mariadb-deployment.yaml +++ b/kubernetes/vid/vid-mariadb-deployment.yaml @@ -50,3 +50,5 @@ spec: - name: my-cnf hostPath: path: /dockerdata-nfs/onapdemo/vid/vid/lf_config/vid-my.cnf + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/kubernetes/vid/vid-server-deployment.yaml b/kubernetes/vid/vid-server-deployment.yaml index b6321d8dd0..1e6e9de80d 100644 --- a/kubernetes/vid/vid-server-deployment.yaml +++ b/kubernetes/vid/vid-server-deployment.yaml @@ -91,3 +91,5 @@ spec: port: 8080 initialDelaySeconds: 5 periodSeconds: 10 + imagePullSecrets: + - name: onap-docker-registry-key diff --git a/message-router-blueprint.yaml b/message-router-blueprint.yaml new file mode 100644 index 0000000000..98a283020b --- /dev/null +++ b/message-router-blueprint.yaml @@ -0,0 +1,532 @@ +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 } + |