# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.
---
# This playbook deploys an Openwhisk stack.
# It assumes you have already set up your database with the respective db provider playbook (currently cloudant.yml or couchdb.yml)
# It assumes that wipe.yml have being deployed at least once

- import_playbook: kafka.yml

- import_playbook: controller.yml

- import_playbook: invoker.yml

- import_playbook: edge.yml

- import_playbook: routemgmt.yml
