From 0f39a55942493b22f28851c78ec5cb65fc6ae222 Mon Sep 17 00:00:00 2001
From: Scott Hussey <sh8121@att.com>
Date: Tue, 21 Aug 2018 16:59:36 -0500
Subject: [PATCH] Refactor build to include Go

Adding the baclient code to Drydock requires a refactor
of the build automation to support multiple languages
and multiple artifacts included in a single Docker image

NOTE: the go source here is a placeholder 'hello world' sample

Change-Id: I1b4883f018b33b3d4fcd7cbcb6cba660fcdc93de
---
 .dockerignore                                 |  1 -
 .gitignore                                    |  4 ++
 Makefile                                      | 17 ++++++---
 go/src/baclient/baclient.go                   |  9 +++++
 images/drydock/Dockerfile                     |  9 +++--
 .../drydock_provisioner}/__init__.py          |  0
 .../drydock_provisioner}/cli/__init__.py      |  0
 .../drydock_provisioner}/cli/action.py        |  0
 .../drydock_provisioner}/cli/commands.py      |  0
 .../drydock_provisioner}/cli/const.py         |  0
 .../cli/design/__init__.py                    |  0
 .../cli/design/actions.py                     |  0
 .../cli/design/commands.py                    |  0
 .../drydock_provisioner}/cli/node/__init__.py |  0
 .../drydock_provisioner}/cli/node/actions.py  |  0
 .../drydock_provisioner}/cli/node/commands.py |  0
 .../drydock_provisioner}/cli/part/__init__.py |  0
 .../drydock_provisioner}/cli/part/actions.py  |  0
 .../drydock_provisioner}/cli/part/commands.py |  0
 .../drydock_provisioner}/cli/task/__init__.py |  0
 .../drydock_provisioner}/cli/task/actions.py  |  0
 .../drydock_provisioner}/cli/task/commands.py |  0
 .../drydock_provisioner}/config.py            |  0
 .../drydock_provisioner}/control/__init__.py  |  0
 .../drydock_provisioner}/control/api.py       |  0
 .../drydock_provisioner}/control/base.py      |  0
 .../control/bootaction.py                     |  0
 .../drydock_provisioner}/control/designs.py   |  0
 .../drydock_provisioner}/control/health.py    |  0
 .../control/middleware.py                     |  0
 .../drydock_provisioner}/control/nodes.py     |  0
 .../drydock_provisioner}/control/readme.md    |  0
 .../drydock_provisioner}/control/tasks.py     |  0
 .../drydock_provisioner}/control/util.py      |  0
 .../control/validation.py                     |  0
 .../drydock_provisioner}/drivers/__init__.py  |  0
 .../drydock_provisioner}/drivers/driver.py    |  0
 .../drivers/node/__init__.py                  |  0
 .../drivers/node/driver.py                    |  0
 .../drivers/node/maasdriver/__init__.py       |  0
 .../node/maasdriver/actions/__init__.py       |  0
 .../drivers/node/maasdriver/actions/node.py   |  0
 .../drivers/node/maasdriver/api_client.py     |  0
 .../drivers/node/maasdriver/driver.py         |  0
 .../node/maasdriver/models/__init__.py        |  0
 .../drivers/node/maasdriver/models/base.py    |  0
 .../node/maasdriver/models/blockdev.py        |  0
 .../node/maasdriver/models/boot_resource.py   |  0
 .../drivers/node/maasdriver/models/domain.py  |  0
 .../drivers/node/maasdriver/models/fabric.py  |  0
 .../node/maasdriver/models/interface.py       |  0
 .../drivers/node/maasdriver/models/iprange.py |  0
 .../drivers/node/maasdriver/models/machine.py |  0
 .../node/maasdriver/models/node_results.py    |  0
 .../node/maasdriver/models/partition.py       |  0
 .../node/maasdriver/models/rack_controller.py |  0
 .../node/maasdriver/models/repository.py      |  0
 .../drivers/node/maasdriver/models/sshkey.py  |  0
 .../node/maasdriver/models/staticroute.py     |  0
 .../drivers/node/maasdriver/models/subnet.py  |  0
 .../drivers/node/maasdriver/models/tag.py     |  0
 .../drivers/node/maasdriver/models/vlan.py    |  0
 .../node/maasdriver/models/volumegroup.py     |  0
 .../drivers/node/maasdriver/readme.md         |  0
 .../drivers/oob/__init__.py                   |  0
 .../drivers/oob/driver.py                     |  0
 .../drivers/oob/libvirt_driver/__init__.py    |  0
 .../oob/libvirt_driver/actions/__init__.py    |  0
 .../drivers/oob/libvirt_driver/actions/oob.py |  0
 .../drivers/oob/libvirt_driver/driver.py      |  0
 .../drivers/oob/manual_driver/__init__.py     |  0
 .../drivers/oob/manual_driver/driver.py       |  0
 .../drivers/oob/pyghmi_driver/__init__.py     |  0
 .../oob/pyghmi_driver/actions/__init__.py     |  0
 .../drivers/oob/pyghmi_driver/actions/oob.py  |  0
 .../drivers/oob/pyghmi_driver/driver.py       |  0
 .../drydock_provisioner}/drivers/readme.md    |  0
 .../drydock_provisioner}/drydock.py           |  0
 .../drydock_client/__init__.py                |  0
 .../drydock_client/client.py                  |  0
 .../drydock_client/session.py                 |  0
 .../drydock_provisioner}/error.py             |  0
 .../drydock_provisioner}/ingester/__init__.py |  0
 .../drydock_provisioner}/ingester/ingester.py |  0
 .../ingester/plugins/__init__.py              |  0
 .../ingester/plugins/deckhand.py              |  0
 .../ingester/plugins/yaml.py                  |  0
 .../drydock_provisioner}/ingester/readme.md   |  0
 .../introspection/readme.md                   |  0
 .../drydock_provisioner}/objects/__init__.py  |  0
 .../drydock_provisioner}/objects/base.py      |  0
 .../objects/bootaction.py                     |  0
 .../drydock_provisioner}/objects/builddata.py |  0
 .../drydock_provisioner}/objects/fields.py    |  0
 .../objects/healthcheck.py                    |  0
 .../objects/hostprofile.py                    |  0
 .../drydock_provisioner}/objects/hwprofile.py |  0
 .../drydock_provisioner}/objects/network.py   |  0
 .../drydock_provisioner}/objects/node.py      |  0
 .../drydock_provisioner}/objects/promenade.py |  0
 .../drydock_provisioner}/objects/rack.py      |  0
 .../drydock_provisioner}/objects/readme.md    |  0
 .../drydock_provisioner}/objects/site.py      |  0
 .../drydock_provisioner}/objects/task.py      |  0
 .../objects/validation.py                     |  0
 .../orchestrator/__init__.py                  |  0
 .../orchestrator/actions/__init__.py          |  0
 .../orchestrator/actions/orchestrator.py      |  0
 .../orchestrator/orchestrator.py              |  0
 .../orchestrator/readme.md                    |  0
 .../drydock_provisioner}/orchestrator/util.py |  0
 .../orchestrator/validations/__init__.py      |  0
 .../validations/boot_storage_rational.py      |  0
 .../validations/bootaction_validity.py        |  0
 .../validations/hostname_validity.py          |  0
 .../validations/hugepages_validity.py         |  0
 .../validations/ip_locality_check.py          |  0
 .../orchestrator/validations/mtu_rational.py  |  0
 .../validations/network_trunking_rational.py  |  0
 .../validations/no_duplicate_ips_check.py     |  0
 .../validations/oob_valid_ipmi.py             |  0
 .../validations/oob_valid_libvirt.py          |  0
 .../validations/platform_selection.py         |  0
 .../validations/rational_network_bond.py      |  0
 .../validations/storage_partititioning.py     |  0
 .../validations/storage_sizing.py             |  0
 .../validations/unique_network_check.py       |  0
 .../orchestrator/validations/validator.py     |  0
 .../orchestrator/validations/validators.py    |  0
 .../drydock_provisioner}/policy.py            |  0
 .../schemas/baremetalNode.yaml                |  0
 .../schemas/bootaction.yaml                   |  0
 .../schemas/hardwareProfile.yaml              |  0
 .../schemas/hostProfile.yaml                  |  0
 .../drydock_provisioner}/schemas/network.yaml |  0
 .../schemas/networkLink.yaml                  |  0
 .../drydock_provisioner}/schemas/rack.yaml    |  0
 .../drydock_provisioner}/schemas/region.yaml  |  0
 .../statemgmt/__init__.py                     |  0
 .../statemgmt/db/__init__.py                  |  0
 .../statemgmt/db/tables.py                    |  0
 .../statemgmt/design/__init__.py              |  0
 .../statemgmt/design/resolver.py              |  0
 .../drydock_provisioner}/statemgmt/readme.rst |  0
 .../drydock_provisioner}/statemgmt/state.py   |  0
 .../drydock_provisioner}/util.py              |  0
 .../requirements-direct.txt                   |  0
 .../requirements-lock.txt                     | 33 +++++++++--------
 .../requirements-test.txt                     |  0
 setup.py => python/setup.py                   |  2 +-
 {tests => python/tests}/conftest.py           |  0
 .../postgres/test_action_config_node_prov.py  |  0
 .../postgres/test_action_prepare_nodes.py     |  0
 .../postgres/test_action_prepare_site.py      |  0
 .../postgres/test_api_bootaction.py           |  0
 .../postgres/test_api_bootaction_status.py    |  0
 .../postgres/test_api_builddata.py            |  0
 .../integration/postgres/test_api_health.py   |  0
 .../integration/postgres/test_api_tasks.py    |  0
 .../postgres/test_bootaction_context.py       |  0
 .../postgres/test_bootaction_signalling.py    |  0
 .../postgres/test_build_data_collection.py    |  0
 .../postgres/test_noderesult_links.py         |  0
 .../integration/postgres/test_orch_generic.py |  0
 .../test_postgres_bootaction_status.py        |  0
 .../postgres/test_postgres_builddata.py       |  0
 .../postgres/test_postgres_leadership.py      |  0
 .../postgres/test_postgres_results.py         |  0
 .../postgres/test_postgres_tasks.py           |  0
 .../integration/test_maasdriver_client.py     |  0
 .../integration/test_maasdriver_network.py    |  0
 .../tests}/postgres/start_postgres.sh         |  0
 .../tests}/postgres/stop_postgres.sh          |  0
 .../tests}/unit/test_api_nodes_unit.py        |  0
 .../tests}/unit/test_api_tasks_unit.py        |  0
 .../tests}/unit/test_api_validation.py        |  0
 .../tests}/unit/test_api_versions.py          |  0
 .../tests}/unit/test_apienforcer.py           |  0
 .../tests}/unit/test_auth_middleware.py       |  0
 .../unit/test_bootaction_asset_render.py      |  0
 .../tests}/unit/test_bootaction_pipeline.py   |  0
 .../tests}/unit/test_bootaction_scoping.py    |  0
 .../tests}/unit/test_bootaction_tarbuilder.py |  0
 {tests => python/tests}/unit/test_cli_task.py |  0
 .../tests}/unit/test_design_inheritance.py    |  0
 .../tests}/unit/test_drydock_client.py        |  0
 .../unit/test_drydock_client_session.py       |  0
 {tests => python/tests}/unit/test_ingester.py |  0
 .../tests}/unit/test_ingester_bootaction.py   |  0
 .../tests}/unit/test_ingester_invalidation.py |  0
 .../tests}/unit/test_ingester_rack_model.py   |  0
 .../tests}/unit/test_libvirt_driver.py        |  0
 .../unit/test_maasdriver_calculate_bytes.py   |  0
 .../unit/test_maasdriver_noderesults.py       |  0
 {tests => python/tests}/unit/test_models.py   |  0
 .../tests}/unit/test_node_logicalnames.py     |  0
 .../tests}/unit/test_node_naming.py           |  0
 .../tests}/unit/test_orch_node_filter.py      |  0
 .../tests}/unit/test_param_reference.py       |  0
 .../tests}/unit/test_policy_engine.py         |  0
 .../tests}/unit/test_reference_resolver.py    |  0
 .../tests}/unit/test_render_routedomain.py    |  0
 .../tests}/unit/test_schema_validation.py     |  0
 .../tests}/unit/test_task_link.py             |  0
 .../tests}/unit/test_task_node_filter.py      |  0
 .../tests}/unit/test_validate_design.py       |  0
 .../unit/test_validation_rule_boot_storage.py |  0
 .../unit/test_validation_rule_bootactions.py  |  0
 .../test_validation_rule_hostname_validity.py |  0
 .../unit/test_validation_rule_hugepages.py    |  0
 .../unit/test_validation_rule_ip_locality.py  |  0
 .../unit/test_validation_rule_mtu_rational.py |  0
 .../unit/test_validation_rule_network_bond.py |  0
 .../test_validation_rule_network_trunking.py  |  0
 .../test_validation_rule_no_duplicate_IPs.py  |  0
 ...st_validation_rule_storage_partitioning.py |  0
 .../test_validation_rule_storage_sizing.py    |  0
 .../test_validation_rule_unique_network.py    |  0
 .../test_validation_rule_valid_platform.py    |  0
 .../yaml_samples/absent_bootaction.yaml       |  0
 .../tests}/yaml_samples/baremetalNode.yaml    |  0
 .../tests}/yaml_samples/baremetalNode2.yaml   |  0
 .../yaml_samples/deckhand_bootaction.yaml     |  0
 .../yaml_samples/deckhand_fullsite.yaml       |  0
 .../deckhand_fullsite_bad_hugepages.yaml      |  0
 .../deckhand_fullsite_libvirt.yaml            |  0
 .../deckhand_fullsite_no_nodes.yaml           |  0
 .../yaml_samples/deckhand_routedomain.yaml    |  0
 .../tests}/yaml_samples/fullsite.yaml         |  0
 .../yaml_samples/fullsite_networks.yaml       |  0
 .../tests}/yaml_samples/fullsite_nodes.yaml   |  0
 .../yaml_samples/fullsite_profiles.yaml       |  0
 .../tests}/yaml_samples/hardwareProfile.yaml  |  0
 .../tests}/yaml_samples/hostProfile.yaml      |  0
 .../tests}/yaml_samples/hostProfile2.yaml     |  0
 .../tests}/yaml_samples/hostprof.yaml         |  0
 .../tests}/yaml_samples/invalid.yaml          |  0
 .../yaml_samples/invalid_baremetalNode.yaml   |  0
 .../yaml_samples/invalid_baremetalNode2.yaml  |  0
 .../invalid_boot_storage_small.yaml           |  0
 .../yaml_samples/invalid_bootaction.yaml      |  0
 .../yaml_samples/invalid_bootaction_pkg.yaml  |  0
 .../yaml_samples/invalid_hardwareProfile.yaml |  0
 .../yaml_samples/invalid_hostProfile.yaml     |  0
 .../yaml_samples/invalid_hostProfile2.yaml    |  0
 .../yaml_samples/invalid_hugepages.yaml       |  0
 .../tests}/yaml_samples/invalid_kernel.yaml   |  0
 .../tests}/yaml_samples/invalid_network.yaml  |  0
 .../tests}/yaml_samples/invalid_network2.yaml |  0
 .../tests}/yaml_samples/invalid_network3.yaml |  0
 .../tests}/yaml_samples/invalid_network4.yaml |  0
 .../tests}/yaml_samples/invalid_network5.yaml |  0
 .../yaml_samples/invalid_networkLink.yaml     |  0
 .../yaml_samples/invalid_networkLink2.yaml    |  0
 .../yaml_samples/invalid_networkLink3.yaml    |  0
 .../tests}/yaml_samples/invalid_rack.yaml     |  0
 .../invalid_rational_network_trunking.yaml    |  0
 .../tests}/yaml_samples/invalid_region.yaml   |  0
 .../yaml_samples/invalid_unique_network.yaml  |  0
 .../yaml_samples/invalid_validation.yaml      |  0
 .../yaml_samples/ip_locality_no_gateway.yaml  |  0
 .../yaml_samples/ip_locality_no_networks.yaml |  0
 .../tests}/yaml_samples/multidoc.yaml         |  0
 .../tests}/yaml_samples/network.yaml          |  0
 .../tests}/yaml_samples/network2.yaml         |  0
 .../tests}/yaml_samples/network3.yaml         |  0
 .../tests}/yaml_samples/network4.yaml         |  0
 .../tests}/yaml_samples/network5.yaml         |  0
 .../tests}/yaml_samples/networkLink.yaml      |  0
 .../tests}/yaml_samples/networkLink2.yaml     |  0
 .../tests}/yaml_samples/networkLink3.yaml     |  0
 .../yaml_samples/no_baremetal_node.yaml       |  0
 .../no_duplicate_IPs_no_addressing.yaml       |  0
 {tests => python/tests}/yaml_samples/oob.yaml |  0
 .../tests}/yaml_samples/rack.yaml             |  0
 .../tests}/yaml_samples/region.yaml           |  0
 .../tests}/yaml_samples/singledoc.yaml        |  0
 ...age_partitioning_unassigned_partition.yaml |  0
 .../tests}/yaml_samples/storage_sizing.yaml   |  0
 .../tests}/yaml_samples/unknown_kind.yaml     |  0
 .../tests}/yaml_samples/validation.yaml       |  0
 tools/drydock_image_build.sh                  |  1 +
 tools/helm_install.sh                         |  7 ++--
 tools/helm_tk.sh                              | 20 ++++++----
 tox.ini                                       | 37 ++++++++++---------
 285 files changed, 83 insertions(+), 57 deletions(-)
 create mode 100644 go/src/baclient/baclient.go
 rename {drydock_provisioner => python/drydock_provisioner}/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/action.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/commands.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/const.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/design/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/design/actions.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/design/commands.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/node/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/node/actions.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/node/commands.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/part/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/part/actions.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/part/commands.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/task/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/task/actions.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/cli/task/commands.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/config.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/control/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/control/api.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/control/base.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/control/bootaction.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/control/designs.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/control/health.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/control/middleware.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/control/nodes.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/control/readme.md (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/control/tasks.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/control/util.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/control/validation.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/driver.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/driver.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/actions/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/actions/node.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/api_client.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/driver.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/base.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/blockdev.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/boot_resource.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/domain.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/fabric.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/interface.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/iprange.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/machine.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/node_results.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/partition.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/rack_controller.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/repository.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/sshkey.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/staticroute.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/subnet.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/tag.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/vlan.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/models/volumegroup.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/node/maasdriver/readme.md (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/oob/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/oob/driver.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/oob/libvirt_driver/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/oob/libvirt_driver/actions/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/oob/libvirt_driver/actions/oob.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/oob/libvirt_driver/driver.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/oob/manual_driver/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/oob/manual_driver/driver.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/oob/pyghmi_driver/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/oob/pyghmi_driver/actions/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/oob/pyghmi_driver/actions/oob.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/oob/pyghmi_driver/driver.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drivers/readme.md (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drydock.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drydock_client/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drydock_client/client.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/drydock_client/session.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/error.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/ingester/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/ingester/ingester.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/ingester/plugins/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/ingester/plugins/deckhand.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/ingester/plugins/yaml.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/ingester/readme.md (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/introspection/readme.md (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/base.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/bootaction.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/builddata.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/fields.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/healthcheck.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/hostprofile.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/hwprofile.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/network.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/node.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/promenade.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/rack.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/readme.md (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/site.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/task.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/objects/validation.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/actions/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/actions/orchestrator.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/orchestrator.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/readme.md (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/util.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/boot_storage_rational.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/bootaction_validity.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/hostname_validity.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/hugepages_validity.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/ip_locality_check.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/mtu_rational.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/network_trunking_rational.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/no_duplicate_ips_check.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/oob_valid_ipmi.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/oob_valid_libvirt.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/platform_selection.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/rational_network_bond.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/storage_partititioning.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/storage_sizing.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/unique_network_check.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/validator.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/orchestrator/validations/validators.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/policy.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/schemas/baremetalNode.yaml (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/schemas/bootaction.yaml (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/schemas/hardwareProfile.yaml (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/schemas/hostProfile.yaml (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/schemas/network.yaml (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/schemas/networkLink.yaml (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/schemas/rack.yaml (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/schemas/region.yaml (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/statemgmt/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/statemgmt/db/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/statemgmt/db/tables.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/statemgmt/design/__init__.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/statemgmt/design/resolver.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/statemgmt/readme.rst (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/statemgmt/state.py (100%)
 rename {drydock_provisioner => python/drydock_provisioner}/util.py (100%)
 rename requirements-direct.txt => python/requirements-direct.txt (100%)
 rename requirements-lock.txt => python/requirements-lock.txt (78%)
 rename requirements-test.txt => python/requirements-test.txt (100%)
 rename setup.py => python/setup.py (96%)
 rename {tests => python/tests}/conftest.py (100%)
 rename {tests => python/tests}/integration/postgres/test_action_config_node_prov.py (100%)
 rename {tests => python/tests}/integration/postgres/test_action_prepare_nodes.py (100%)
 rename {tests => python/tests}/integration/postgres/test_action_prepare_site.py (100%)
 rename {tests => python/tests}/integration/postgres/test_api_bootaction.py (100%)
 rename {tests => python/tests}/integration/postgres/test_api_bootaction_status.py (100%)
 rename {tests => python/tests}/integration/postgres/test_api_builddata.py (100%)
 rename {tests => python/tests}/integration/postgres/test_api_health.py (100%)
 rename {tests => python/tests}/integration/postgres/test_api_tasks.py (100%)
 rename {tests => python/tests}/integration/postgres/test_bootaction_context.py (100%)
 rename {tests => python/tests}/integration/postgres/test_bootaction_signalling.py (100%)
 rename {tests => python/tests}/integration/postgres/test_build_data_collection.py (100%)
 rename {tests => python/tests}/integration/postgres/test_noderesult_links.py (100%)
 rename {tests => python/tests}/integration/postgres/test_orch_generic.py (100%)
 rename {tests => python/tests}/integration/postgres/test_postgres_bootaction_status.py (100%)
 rename {tests => python/tests}/integration/postgres/test_postgres_builddata.py (100%)
 rename {tests => python/tests}/integration/postgres/test_postgres_leadership.py (100%)
 rename {tests => python/tests}/integration/postgres/test_postgres_results.py (100%)
 rename {tests => python/tests}/integration/postgres/test_postgres_tasks.py (100%)
 rename {tests => python/tests}/integration/test_maasdriver_client.py (100%)
 rename {tests => python/tests}/integration/test_maasdriver_network.py (100%)
 rename {tests => python/tests}/postgres/start_postgres.sh (100%)
 rename {tests => python/tests}/postgres/stop_postgres.sh (100%)
 rename {tests => python/tests}/unit/test_api_nodes_unit.py (100%)
 rename {tests => python/tests}/unit/test_api_tasks_unit.py (100%)
 rename {tests => python/tests}/unit/test_api_validation.py (100%)
 rename {tests => python/tests}/unit/test_api_versions.py (100%)
 rename {tests => python/tests}/unit/test_apienforcer.py (100%)
 rename {tests => python/tests}/unit/test_auth_middleware.py (100%)
 rename {tests => python/tests}/unit/test_bootaction_asset_render.py (100%)
 rename {tests => python/tests}/unit/test_bootaction_pipeline.py (100%)
 rename {tests => python/tests}/unit/test_bootaction_scoping.py (100%)
 rename {tests => python/tests}/unit/test_bootaction_tarbuilder.py (100%)
 rename {tests => python/tests}/unit/test_cli_task.py (100%)
 rename {tests => python/tests}/unit/test_design_inheritance.py (100%)
 rename {tests => python/tests}/unit/test_drydock_client.py (100%)
 rename {tests => python/tests}/unit/test_drydock_client_session.py (100%)
 rename {tests => python/tests}/unit/test_ingester.py (100%)
 rename {tests => python/tests}/unit/test_ingester_bootaction.py (100%)
 rename {tests => python/tests}/unit/test_ingester_invalidation.py (100%)
 rename {tests => python/tests}/unit/test_ingester_rack_model.py (100%)
 rename {tests => python/tests}/unit/test_libvirt_driver.py (100%)
 rename {tests => python/tests}/unit/test_maasdriver_calculate_bytes.py (100%)
 rename {tests => python/tests}/unit/test_maasdriver_noderesults.py (100%)
 rename {tests => python/tests}/unit/test_models.py (100%)
 rename {tests => python/tests}/unit/test_node_logicalnames.py (100%)
 rename {tests => python/tests}/unit/test_node_naming.py (100%)
 rename {tests => python/tests}/unit/test_orch_node_filter.py (100%)
 rename {tests => python/tests}/unit/test_param_reference.py (100%)
 rename {tests => python/tests}/unit/test_policy_engine.py (100%)
 rename {tests => python/tests}/unit/test_reference_resolver.py (100%)
 rename {tests => python/tests}/unit/test_render_routedomain.py (100%)
 rename {tests => python/tests}/unit/test_schema_validation.py (100%)
 rename {tests => python/tests}/unit/test_task_link.py (100%)
 rename {tests => python/tests}/unit/test_task_node_filter.py (100%)
 rename {tests => python/tests}/unit/test_validate_design.py (100%)
 rename {tests => python/tests}/unit/test_validation_rule_boot_storage.py (100%)
 rename {tests => python/tests}/unit/test_validation_rule_bootactions.py (100%)
 rename {tests => python/tests}/unit/test_validation_rule_hostname_validity.py (100%)
 rename {tests => python/tests}/unit/test_validation_rule_hugepages.py (100%)
 rename {tests => python/tests}/unit/test_validation_rule_ip_locality.py (100%)
 rename {tests => python/tests}/unit/test_validation_rule_mtu_rational.py (100%)
 rename {tests => python/tests}/unit/test_validation_rule_network_bond.py (100%)
 rename {tests => python/tests}/unit/test_validation_rule_network_trunking.py (100%)
 rename {tests => python/tests}/unit/test_validation_rule_no_duplicate_IPs.py (100%)
 rename {tests => python/tests}/unit/test_validation_rule_storage_partitioning.py (100%)
 rename {tests => python/tests}/unit/test_validation_rule_storage_sizing.py (100%)
 rename {tests => python/tests}/unit/test_validation_rule_unique_network.py (100%)
 rename {tests => python/tests}/unit/test_validation_rule_valid_platform.py (100%)
 rename {tests => python/tests}/yaml_samples/absent_bootaction.yaml (100%)
 rename {tests => python/tests}/yaml_samples/baremetalNode.yaml (100%)
 rename {tests => python/tests}/yaml_samples/baremetalNode2.yaml (100%)
 rename {tests => python/tests}/yaml_samples/deckhand_bootaction.yaml (100%)
 rename {tests => python/tests}/yaml_samples/deckhand_fullsite.yaml (100%)
 rename {tests => python/tests}/yaml_samples/deckhand_fullsite_bad_hugepages.yaml (100%)
 rename {tests => python/tests}/yaml_samples/deckhand_fullsite_libvirt.yaml (100%)
 rename {tests => python/tests}/yaml_samples/deckhand_fullsite_no_nodes.yaml (100%)
 rename {tests => python/tests}/yaml_samples/deckhand_routedomain.yaml (100%)
 rename {tests => python/tests}/yaml_samples/fullsite.yaml (100%)
 rename {tests => python/tests}/yaml_samples/fullsite_networks.yaml (100%)
 rename {tests => python/tests}/yaml_samples/fullsite_nodes.yaml (100%)
 rename {tests => python/tests}/yaml_samples/fullsite_profiles.yaml (100%)
 rename {tests => python/tests}/yaml_samples/hardwareProfile.yaml (100%)
 rename {tests => python/tests}/yaml_samples/hostProfile.yaml (100%)
 rename {tests => python/tests}/yaml_samples/hostProfile2.yaml (100%)
 rename {tests => python/tests}/yaml_samples/hostprof.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_baremetalNode.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_baremetalNode2.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_boot_storage_small.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_bootaction.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_bootaction_pkg.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_hardwareProfile.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_hostProfile.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_hostProfile2.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_hugepages.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_kernel.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_network.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_network2.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_network3.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_network4.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_network5.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_networkLink.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_networkLink2.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_networkLink3.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_rack.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_rational_network_trunking.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_region.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_unique_network.yaml (100%)
 rename {tests => python/tests}/yaml_samples/invalid_validation.yaml (100%)
 rename {tests => python/tests}/yaml_samples/ip_locality_no_gateway.yaml (100%)
 rename {tests => python/tests}/yaml_samples/ip_locality_no_networks.yaml (100%)
 rename {tests => python/tests}/yaml_samples/multidoc.yaml (100%)
 rename {tests => python/tests}/yaml_samples/network.yaml (100%)
 rename {tests => python/tests}/yaml_samples/network2.yaml (100%)
 rename {tests => python/tests}/yaml_samples/network3.yaml (100%)
 rename {tests => python/tests}/yaml_samples/network4.yaml (100%)
 rename {tests => python/tests}/yaml_samples/network5.yaml (100%)
 rename {tests => python/tests}/yaml_samples/networkLink.yaml (100%)
 rename {tests => python/tests}/yaml_samples/networkLink2.yaml (100%)
 rename {tests => python/tests}/yaml_samples/networkLink3.yaml (100%)
 rename {tests => python/tests}/yaml_samples/no_baremetal_node.yaml (100%)
 rename {tests => python/tests}/yaml_samples/no_duplicate_IPs_no_addressing.yaml (100%)
 rename {tests => python/tests}/yaml_samples/oob.yaml (100%)
 rename {tests => python/tests}/yaml_samples/rack.yaml (100%)
 rename {tests => python/tests}/yaml_samples/region.yaml (100%)
 rename {tests => python/tests}/yaml_samples/singledoc.yaml (100%)
 rename {tests => python/tests}/yaml_samples/storage_partitioning_unassigned_partition.yaml (100%)
 rename {tests => python/tests}/yaml_samples/storage_sizing.yaml (100%)
 rename {tests => python/tests}/yaml_samples/unknown_kind.yaml (100%)
 rename {tests => python/tests}/yaml_samples/validation.yaml (100%)

diff --git a/.dockerignore b/.dockerignore
index 5b449cc3..172bf578 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,2 +1 @@
 .tox
-**/build
diff --git a/.gitignore b/.gitignore
index f21b0208..46150f8f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -104,3 +104,7 @@ ENV/
 
 # VIM
 .*.swp
+
+# Chart artifacts
+charts/drydock/charts
+charts/drydock/requirements.lock
diff --git a/Makefile b/Makefile
index de58804c..fcfceb94 100644
--- a/Makefile
+++ b/Makefile
@@ -12,18 +12,20 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-BUILD_DIR       := $(shell mktemp -d)
+BUILD_DIR       := $(shell mkdir -p build && mktemp -d -p build)
 DOCKER_REGISTRY ?= quay.io
 IMAGE_NAME      ?= drydock
 IMAGE_PREFIX    ?= airshipit
 IMAGE_TAG       ?= dev
-HELM            := $(BUILD_DIR)/helm
+HELM            := $(shell realpath $(BUILD_DIR))/helm
 PROXY           ?= http://proxy.foo.com:8000
 NO_PROXY        ?= localhost,127.0.0.1,.svc.cluster.local
 USE_PROXY       ?= false
 PUSH_IMAGE      ?= false
 LABEL           ?= commit-id
 IMAGE           ?= ${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME}:${IMAGE_TAG}
+GO_BUILDER      ?= docker.io/golang:1.10-alpine
+
 export
 
 # Build all docker images for this project
@@ -101,12 +103,17 @@ helm-install:
 # Make targets intended for use by the primary targets above.
 
 .PHONY: build_drydock
-build_drydock: external_dep
+build_drydock: external_dep build_baclient
 	export; tools/drydock_image_build.sh
 ifeq ($(PUSH_IMAGE), true)
 	docker push $(IMAGE)
 endif
 
+# Make target for building bootaction signal client
+.PHONY: build_baclient
+build_baclient: external_dep
+	docker run -tv $(shell realpath go):/work -v $(shell realpath $(BUILD_DIR)):/build -e GOPATH=/work $(GO_BUILDER) go build -o /build/baclient baclient
+
 .PHONY: docs
 docs: clean drydock_docs
 
@@ -132,7 +139,6 @@ genconfig:
 
 .PHONY: clean
 clean:
-	rm -rf $(BUILD_DIR)/*
 	rm -rf build
 	rm -rf docs/build
 	rm -rf charts/drydock/charts
@@ -143,6 +149,5 @@ pep8: external_dep
 	tox -e pep8
 
 .PHONY: helm_lint
-helm_lint: clean helm-init
-	tools/helm_tk.sh $(HELM)
+helm_lint: helm-init
 	$(HELM) lint charts/drydock
diff --git a/go/src/baclient/baclient.go b/go/src/baclient/baclient.go
new file mode 100644
index 00000000..e8c03319
--- /dev/null
+++ b/go/src/baclient/baclient.go
@@ -0,0 +1,9 @@
+package main
+
+import (
+  "fmt"
+)
+
+func main() {
+  fmt.Printf("Hello World!\n")
+}
diff --git a/images/drydock/Dockerfile b/images/drydock/Dockerfile
index 28cb214f..eebefba2 100644
--- a/images/drydock/Dockerfile
+++ b/images/drydock/Dockerfile
@@ -18,6 +18,7 @@ ARG TRUSTED_UBUNTU_REPO=no
 ARG ALLOW_UNAUTHENTICATED=false
 ARG PIP_TRUSTED_HOST=foo.com
 ARG PIP_INDEX_URL=https://pypi.org/simple
+ARG BUILD_DIR
 ENV container docker
 ENV PORT 9000
 ENV LC_ALL C.UTF-8
@@ -37,15 +38,15 @@ WORKDIR /tmp/drydock
 RUN ./hostdeps.sh; \
     rm -r /var/lib/apt/lists/*
 
-COPY ./requirements-lock.txt /tmp/drydock/
+COPY ./python/requirements-lock.txt /tmp/drydock/
 RUN pip3 install \
     --no-cache-dir \
     -r /tmp/drydock/requirements-lock.txt
 
+COPY ./python /tmp/drydock/python
+COPY ${BUILD_DIR}/baclient /tmp/drydock/python/drydock_provisioner/assets/baclient
 
-COPY . /tmp/drydock
-
-WORKDIR /tmp/drydock
+WORKDIR /tmp/drydock/python
 RUN python3 setup.py install
 
 EXPOSE $PORT
diff --git a/drydock_provisioner/__init__.py b/python/drydock_provisioner/__init__.py
similarity index 100%
rename from drydock_provisioner/__init__.py
rename to python/drydock_provisioner/__init__.py
diff --git a/drydock_provisioner/cli/__init__.py b/python/drydock_provisioner/cli/__init__.py
similarity index 100%
rename from drydock_provisioner/cli/__init__.py
rename to python/drydock_provisioner/cli/__init__.py
diff --git a/drydock_provisioner/cli/action.py b/python/drydock_provisioner/cli/action.py
similarity index 100%
rename from drydock_provisioner/cli/action.py
rename to python/drydock_provisioner/cli/action.py
diff --git a/drydock_provisioner/cli/commands.py b/python/drydock_provisioner/cli/commands.py
similarity index 100%
rename from drydock_provisioner/cli/commands.py
rename to python/drydock_provisioner/cli/commands.py
diff --git a/drydock_provisioner/cli/const.py b/python/drydock_provisioner/cli/const.py
similarity index 100%
rename from drydock_provisioner/cli/const.py
rename to python/drydock_provisioner/cli/const.py
diff --git a/drydock_provisioner/cli/design/__init__.py b/python/drydock_provisioner/cli/design/__init__.py
similarity index 100%
rename from drydock_provisioner/cli/design/__init__.py
rename to python/drydock_provisioner/cli/design/__init__.py
diff --git a/drydock_provisioner/cli/design/actions.py b/python/drydock_provisioner/cli/design/actions.py
similarity index 100%
rename from drydock_provisioner/cli/design/actions.py
rename to python/drydock_provisioner/cli/design/actions.py
diff --git a/drydock_provisioner/cli/design/commands.py b/python/drydock_provisioner/cli/design/commands.py
similarity index 100%
rename from drydock_provisioner/cli/design/commands.py
rename to python/drydock_provisioner/cli/design/commands.py
diff --git a/drydock_provisioner/cli/node/__init__.py b/python/drydock_provisioner/cli/node/__init__.py
similarity index 100%
rename from drydock_provisioner/cli/node/__init__.py
rename to python/drydock_provisioner/cli/node/__init__.py
diff --git a/drydock_provisioner/cli/node/actions.py b/python/drydock_provisioner/cli/node/actions.py
similarity index 100%
rename from drydock_provisioner/cli/node/actions.py
rename to python/drydock_provisioner/cli/node/actions.py
diff --git a/drydock_provisioner/cli/node/commands.py b/python/drydock_provisioner/cli/node/commands.py
similarity index 100%
rename from drydock_provisioner/cli/node/commands.py
rename to python/drydock_provisioner/cli/node/commands.py
diff --git a/drydock_provisioner/cli/part/__init__.py b/python/drydock_provisioner/cli/part/__init__.py
similarity index 100%
rename from drydock_provisioner/cli/part/__init__.py
rename to python/drydock_provisioner/cli/part/__init__.py
diff --git a/drydock_provisioner/cli/part/actions.py b/python/drydock_provisioner/cli/part/actions.py
similarity index 100%
rename from drydock_provisioner/cli/part/actions.py
rename to python/drydock_provisioner/cli/part/actions.py
diff --git a/drydock_provisioner/cli/part/commands.py b/python/drydock_provisioner/cli/part/commands.py
similarity index 100%
rename from drydock_provisioner/cli/part/commands.py
rename to python/drydock_provisioner/cli/part/commands.py
diff --git a/drydock_provisioner/cli/task/__init__.py b/python/drydock_provisioner/cli/task/__init__.py
similarity index 100%
rename from drydock_provisioner/cli/task/__init__.py
rename to python/drydock_provisioner/cli/task/__init__.py
diff --git a/drydock_provisioner/cli/task/actions.py b/python/drydock_provisioner/cli/task/actions.py
similarity index 100%
rename from drydock_provisioner/cli/task/actions.py
rename to python/drydock_provisioner/cli/task/actions.py
diff --git a/drydock_provisioner/cli/task/commands.py b/python/drydock_provisioner/cli/task/commands.py
similarity index 100%
rename from drydock_provisioner/cli/task/commands.py
rename to python/drydock_provisioner/cli/task/commands.py
diff --git a/drydock_provisioner/config.py b/python/drydock_provisioner/config.py
similarity index 100%
rename from drydock_provisioner/config.py
rename to python/drydock_provisioner/config.py
diff --git a/drydock_provisioner/control/__init__.py b/python/drydock_provisioner/control/__init__.py
similarity index 100%
rename from drydock_provisioner/control/__init__.py
rename to python/drydock_provisioner/control/__init__.py
diff --git a/drydock_provisioner/control/api.py b/python/drydock_provisioner/control/api.py
similarity index 100%
rename from drydock_provisioner/control/api.py
rename to python/drydock_provisioner/control/api.py
diff --git a/drydock_provisioner/control/base.py b/python/drydock_provisioner/control/base.py
similarity index 100%
rename from drydock_provisioner/control/base.py
rename to python/drydock_provisioner/control/base.py
diff --git a/drydock_provisioner/control/bootaction.py b/python/drydock_provisioner/control/bootaction.py
similarity index 100%
rename from drydock_provisioner/control/bootaction.py
rename to python/drydock_provisioner/control/bootaction.py
diff --git a/drydock_provisioner/control/designs.py b/python/drydock_provisioner/control/designs.py
similarity index 100%
rename from drydock_provisioner/control/designs.py
rename to python/drydock_provisioner/control/designs.py
diff --git a/drydock_provisioner/control/health.py b/python/drydock_provisioner/control/health.py
similarity index 100%
rename from drydock_provisioner/control/health.py
rename to python/drydock_provisioner/control/health.py
diff --git a/drydock_provisioner/control/middleware.py b/python/drydock_provisioner/control/middleware.py
similarity index 100%
rename from drydock_provisioner/control/middleware.py
rename to python/drydock_provisioner/control/middleware.py
diff --git a/drydock_provisioner/control/nodes.py b/python/drydock_provisioner/control/nodes.py
similarity index 100%
rename from drydock_provisioner/control/nodes.py
rename to python/drydock_provisioner/control/nodes.py
diff --git a/drydock_provisioner/control/readme.md b/python/drydock_provisioner/control/readme.md
similarity index 100%
rename from drydock_provisioner/control/readme.md
rename to python/drydock_provisioner/control/readme.md
diff --git a/drydock_provisioner/control/tasks.py b/python/drydock_provisioner/control/tasks.py
similarity index 100%
rename from drydock_provisioner/control/tasks.py
rename to python/drydock_provisioner/control/tasks.py
diff --git a/drydock_provisioner/control/util.py b/python/drydock_provisioner/control/util.py
similarity index 100%
rename from drydock_provisioner/control/util.py
rename to python/drydock_provisioner/control/util.py
diff --git a/drydock_provisioner/control/validation.py b/python/drydock_provisioner/control/validation.py
similarity index 100%
rename from drydock_provisioner/control/validation.py
rename to python/drydock_provisioner/control/validation.py
diff --git a/drydock_provisioner/drivers/__init__.py b/python/drydock_provisioner/drivers/__init__.py
similarity index 100%
rename from drydock_provisioner/drivers/__init__.py
rename to python/drydock_provisioner/drivers/__init__.py
diff --git a/drydock_provisioner/drivers/driver.py b/python/drydock_provisioner/drivers/driver.py
similarity index 100%
rename from drydock_provisioner/drivers/driver.py
rename to python/drydock_provisioner/drivers/driver.py
diff --git a/drydock_provisioner/drivers/node/__init__.py b/python/drydock_provisioner/drivers/node/__init__.py
similarity index 100%
rename from drydock_provisioner/drivers/node/__init__.py
rename to python/drydock_provisioner/drivers/node/__init__.py
diff --git a/drydock_provisioner/drivers/node/driver.py b/python/drydock_provisioner/drivers/node/driver.py
similarity index 100%
rename from drydock_provisioner/drivers/node/driver.py
rename to python/drydock_provisioner/drivers/node/driver.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/__init__.py b/python/drydock_provisioner/drivers/node/maasdriver/__init__.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/__init__.py
rename to python/drydock_provisioner/drivers/node/maasdriver/__init__.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/actions/__init__.py b/python/drydock_provisioner/drivers/node/maasdriver/actions/__init__.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/actions/__init__.py
rename to python/drydock_provisioner/drivers/node/maasdriver/actions/__init__.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/actions/node.py b/python/drydock_provisioner/drivers/node/maasdriver/actions/node.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/actions/node.py
rename to python/drydock_provisioner/drivers/node/maasdriver/actions/node.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/api_client.py b/python/drydock_provisioner/drivers/node/maasdriver/api_client.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/api_client.py
rename to python/drydock_provisioner/drivers/node/maasdriver/api_client.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/driver.py b/python/drydock_provisioner/drivers/node/maasdriver/driver.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/driver.py
rename to python/drydock_provisioner/drivers/node/maasdriver/driver.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/__init__.py b/python/drydock_provisioner/drivers/node/maasdriver/models/__init__.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/__init__.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/__init__.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/base.py b/python/drydock_provisioner/drivers/node/maasdriver/models/base.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/base.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/base.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/blockdev.py b/python/drydock_provisioner/drivers/node/maasdriver/models/blockdev.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/blockdev.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/blockdev.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/boot_resource.py b/python/drydock_provisioner/drivers/node/maasdriver/models/boot_resource.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/boot_resource.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/boot_resource.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/domain.py b/python/drydock_provisioner/drivers/node/maasdriver/models/domain.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/domain.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/domain.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/fabric.py b/python/drydock_provisioner/drivers/node/maasdriver/models/fabric.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/fabric.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/fabric.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/interface.py b/python/drydock_provisioner/drivers/node/maasdriver/models/interface.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/interface.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/interface.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/iprange.py b/python/drydock_provisioner/drivers/node/maasdriver/models/iprange.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/iprange.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/iprange.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/machine.py b/python/drydock_provisioner/drivers/node/maasdriver/models/machine.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/machine.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/machine.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/node_results.py b/python/drydock_provisioner/drivers/node/maasdriver/models/node_results.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/node_results.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/node_results.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/partition.py b/python/drydock_provisioner/drivers/node/maasdriver/models/partition.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/partition.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/partition.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/rack_controller.py b/python/drydock_provisioner/drivers/node/maasdriver/models/rack_controller.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/rack_controller.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/rack_controller.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/repository.py b/python/drydock_provisioner/drivers/node/maasdriver/models/repository.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/repository.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/repository.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/sshkey.py b/python/drydock_provisioner/drivers/node/maasdriver/models/sshkey.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/sshkey.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/sshkey.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/staticroute.py b/python/drydock_provisioner/drivers/node/maasdriver/models/staticroute.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/staticroute.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/staticroute.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/subnet.py b/python/drydock_provisioner/drivers/node/maasdriver/models/subnet.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/subnet.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/subnet.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/tag.py b/python/drydock_provisioner/drivers/node/maasdriver/models/tag.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/tag.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/tag.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/vlan.py b/python/drydock_provisioner/drivers/node/maasdriver/models/vlan.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/vlan.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/vlan.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/models/volumegroup.py b/python/drydock_provisioner/drivers/node/maasdriver/models/volumegroup.py
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/models/volumegroup.py
rename to python/drydock_provisioner/drivers/node/maasdriver/models/volumegroup.py
diff --git a/drydock_provisioner/drivers/node/maasdriver/readme.md b/python/drydock_provisioner/drivers/node/maasdriver/readme.md
similarity index 100%
rename from drydock_provisioner/drivers/node/maasdriver/readme.md
rename to python/drydock_provisioner/drivers/node/maasdriver/readme.md
diff --git a/drydock_provisioner/drivers/oob/__init__.py b/python/drydock_provisioner/drivers/oob/__init__.py
similarity index 100%
rename from drydock_provisioner/drivers/oob/__init__.py
rename to python/drydock_provisioner/drivers/oob/__init__.py
diff --git a/drydock_provisioner/drivers/oob/driver.py b/python/drydock_provisioner/drivers/oob/driver.py
similarity index 100%
rename from drydock_provisioner/drivers/oob/driver.py
rename to python/drydock_provisioner/drivers/oob/driver.py
diff --git a/drydock_provisioner/drivers/oob/libvirt_driver/__init__.py b/python/drydock_provisioner/drivers/oob/libvirt_driver/__init__.py
similarity index 100%
rename from drydock_provisioner/drivers/oob/libvirt_driver/__init__.py
rename to python/drydock_provisioner/drivers/oob/libvirt_driver/__init__.py
diff --git a/drydock_provisioner/drivers/oob/libvirt_driver/actions/__init__.py b/python/drydock_provisioner/drivers/oob/libvirt_driver/actions/__init__.py
similarity index 100%
rename from drydock_provisioner/drivers/oob/libvirt_driver/actions/__init__.py
rename to python/drydock_provisioner/drivers/oob/libvirt_driver/actions/__init__.py
diff --git a/drydock_provisioner/drivers/oob/libvirt_driver/actions/oob.py b/python/drydock_provisioner/drivers/oob/libvirt_driver/actions/oob.py
similarity index 100%
rename from drydock_provisioner/drivers/oob/libvirt_driver/actions/oob.py
rename to python/drydock_provisioner/drivers/oob/libvirt_driver/actions/oob.py
diff --git a/drydock_provisioner/drivers/oob/libvirt_driver/driver.py b/python/drydock_provisioner/drivers/oob/libvirt_driver/driver.py
similarity index 100%
rename from drydock_provisioner/drivers/oob/libvirt_driver/driver.py
rename to python/drydock_provisioner/drivers/oob/libvirt_driver/driver.py
diff --git a/drydock_provisioner/drivers/oob/manual_driver/__init__.py b/python/drydock_provisioner/drivers/oob/manual_driver/__init__.py
similarity index 100%
rename from drydock_provisioner/drivers/oob/manual_driver/__init__.py
rename to python/drydock_provisioner/drivers/oob/manual_driver/__init__.py
diff --git a/drydock_provisioner/drivers/oob/manual_driver/driver.py b/python/drydock_provisioner/drivers/oob/manual_driver/driver.py
similarity index 100%
rename from drydock_provisioner/drivers/oob/manual_driver/driver.py
rename to python/drydock_provisioner/drivers/oob/manual_driver/driver.py
diff --git a/drydock_provisioner/drivers/oob/pyghmi_driver/__init__.py b/python/drydock_provisioner/drivers/oob/pyghmi_driver/__init__.py
similarity index 100%
rename from drydock_provisioner/drivers/oob/pyghmi_driver/__init__.py
rename to python/drydock_provisioner/drivers/oob/pyghmi_driver/__init__.py
diff --git a/drydock_provisioner/drivers/oob/pyghmi_driver/actions/__init__.py b/python/drydock_provisioner/drivers/oob/pyghmi_driver/actions/__init__.py
similarity index 100%
rename from drydock_provisioner/drivers/oob/pyghmi_driver/actions/__init__.py
rename to python/drydock_provisioner/drivers/oob/pyghmi_driver/actions/__init__.py
diff --git a/drydock_provisioner/drivers/oob/pyghmi_driver/actions/oob.py b/python/drydock_provisioner/drivers/oob/pyghmi_driver/actions/oob.py
similarity index 100%
rename from drydock_provisioner/drivers/oob/pyghmi_driver/actions/oob.py
rename to python/drydock_provisioner/drivers/oob/pyghmi_driver/actions/oob.py
diff --git a/drydock_provisioner/drivers/oob/pyghmi_driver/driver.py b/python/drydock_provisioner/drivers/oob/pyghmi_driver/driver.py
similarity index 100%
rename from drydock_provisioner/drivers/oob/pyghmi_driver/driver.py
rename to python/drydock_provisioner/drivers/oob/pyghmi_driver/driver.py
diff --git a/drydock_provisioner/drivers/readme.md b/python/drydock_provisioner/drivers/readme.md
similarity index 100%
rename from drydock_provisioner/drivers/readme.md
rename to python/drydock_provisioner/drivers/readme.md
diff --git a/drydock_provisioner/drydock.py b/python/drydock_provisioner/drydock.py
similarity index 100%
rename from drydock_provisioner/drydock.py
rename to python/drydock_provisioner/drydock.py
diff --git a/drydock_provisioner/drydock_client/__init__.py b/python/drydock_provisioner/drydock_client/__init__.py
similarity index 100%
rename from drydock_provisioner/drydock_client/__init__.py
rename to python/drydock_provisioner/drydock_client/__init__.py
diff --git a/drydock_provisioner/drydock_client/client.py b/python/drydock_provisioner/drydock_client/client.py
similarity index 100%
rename from drydock_provisioner/drydock_client/client.py
rename to python/drydock_provisioner/drydock_client/client.py
diff --git a/drydock_provisioner/drydock_client/session.py b/python/drydock_provisioner/drydock_client/session.py
similarity index 100%
rename from drydock_provisioner/drydock_client/session.py
rename to python/drydock_provisioner/drydock_client/session.py
diff --git a/drydock_provisioner/error.py b/python/drydock_provisioner/error.py
similarity index 100%
rename from drydock_provisioner/error.py
rename to python/drydock_provisioner/error.py
diff --git a/drydock_provisioner/ingester/__init__.py b/python/drydock_provisioner/ingester/__init__.py
similarity index 100%
rename from drydock_provisioner/ingester/__init__.py
rename to python/drydock_provisioner/ingester/__init__.py
diff --git a/drydock_provisioner/ingester/ingester.py b/python/drydock_provisioner/ingester/ingester.py
similarity index 100%
rename from drydock_provisioner/ingester/ingester.py
rename to python/drydock_provisioner/ingester/ingester.py
diff --git a/drydock_provisioner/ingester/plugins/__init__.py b/python/drydock_provisioner/ingester/plugins/__init__.py
similarity index 100%
rename from drydock_provisioner/ingester/plugins/__init__.py
rename to python/drydock_provisioner/ingester/plugins/__init__.py
diff --git a/drydock_provisioner/ingester/plugins/deckhand.py b/python/drydock_provisioner/ingester/plugins/deckhand.py
similarity index 100%
rename from drydock_provisioner/ingester/plugins/deckhand.py
rename to python/drydock_provisioner/ingester/plugins/deckhand.py
diff --git a/drydock_provisioner/ingester/plugins/yaml.py b/python/drydock_provisioner/ingester/plugins/yaml.py
similarity index 100%
rename from drydock_provisioner/ingester/plugins/yaml.py
rename to python/drydock_provisioner/ingester/plugins/yaml.py
diff --git a/drydock_provisioner/ingester/readme.md b/python/drydock_provisioner/ingester/readme.md
similarity index 100%
rename from drydock_provisioner/ingester/readme.md
rename to python/drydock_provisioner/ingester/readme.md
diff --git a/drydock_provisioner/introspection/readme.md b/python/drydock_provisioner/introspection/readme.md
similarity index 100%
rename from drydock_provisioner/introspection/readme.md
rename to python/drydock_provisioner/introspection/readme.md
diff --git a/drydock_provisioner/objects/__init__.py b/python/drydock_provisioner/objects/__init__.py
similarity index 100%
rename from drydock_provisioner/objects/__init__.py
rename to python/drydock_provisioner/objects/__init__.py
diff --git a/drydock_provisioner/objects/base.py b/python/drydock_provisioner/objects/base.py
similarity index 100%
rename from drydock_provisioner/objects/base.py
rename to python/drydock_provisioner/objects/base.py
diff --git a/drydock_provisioner/objects/bootaction.py b/python/drydock_provisioner/objects/bootaction.py
similarity index 100%
rename from drydock_provisioner/objects/bootaction.py
rename to python/drydock_provisioner/objects/bootaction.py
diff --git a/drydock_provisioner/objects/builddata.py b/python/drydock_provisioner/objects/builddata.py
similarity index 100%
rename from drydock_provisioner/objects/builddata.py
rename to python/drydock_provisioner/objects/builddata.py
diff --git a/drydock_provisioner/objects/fields.py b/python/drydock_provisioner/objects/fields.py
similarity index 100%
rename from drydock_provisioner/objects/fields.py
rename to python/drydock_provisioner/objects/fields.py
diff --git a/drydock_provisioner/objects/healthcheck.py b/python/drydock_provisioner/objects/healthcheck.py
similarity index 100%
rename from drydock_provisioner/objects/healthcheck.py
rename to python/drydock_provisioner/objects/healthcheck.py
diff --git a/drydock_provisioner/objects/hostprofile.py b/python/drydock_provisioner/objects/hostprofile.py
similarity index 100%
rename from drydock_provisioner/objects/hostprofile.py
rename to python/drydock_provisioner/objects/hostprofile.py
diff --git a/drydock_provisioner/objects/hwprofile.py b/python/drydock_provisioner/objects/hwprofile.py
similarity index 100%
rename from drydock_provisioner/objects/hwprofile.py
rename to python/drydock_provisioner/objects/hwprofile.py
diff --git a/drydock_provisioner/objects/network.py b/python/drydock_provisioner/objects/network.py
similarity index 100%
rename from drydock_provisioner/objects/network.py
rename to python/drydock_provisioner/objects/network.py
diff --git a/drydock_provisioner/objects/node.py b/python/drydock_provisioner/objects/node.py
similarity index 100%
rename from drydock_provisioner/objects/node.py
rename to python/drydock_provisioner/objects/node.py
diff --git a/drydock_provisioner/objects/promenade.py b/python/drydock_provisioner/objects/promenade.py
similarity index 100%
rename from drydock_provisioner/objects/promenade.py
rename to python/drydock_provisioner/objects/promenade.py
diff --git a/drydock_provisioner/objects/rack.py b/python/drydock_provisioner/objects/rack.py
similarity index 100%
rename from drydock_provisioner/objects/rack.py
rename to python/drydock_provisioner/objects/rack.py
diff --git a/drydock_provisioner/objects/readme.md b/python/drydock_provisioner/objects/readme.md
similarity index 100%
rename from drydock_provisioner/objects/readme.md
rename to python/drydock_provisioner/objects/readme.md
diff --git a/drydock_provisioner/objects/site.py b/python/drydock_provisioner/objects/site.py
similarity index 100%
rename from drydock_provisioner/objects/site.py
rename to python/drydock_provisioner/objects/site.py
diff --git a/drydock_provisioner/objects/task.py b/python/drydock_provisioner/objects/task.py
similarity index 100%
rename from drydock_provisioner/objects/task.py
rename to python/drydock_provisioner/objects/task.py
diff --git a/drydock_provisioner/objects/validation.py b/python/drydock_provisioner/objects/validation.py
similarity index 100%
rename from drydock_provisioner/objects/validation.py
rename to python/drydock_provisioner/objects/validation.py
diff --git a/drydock_provisioner/orchestrator/__init__.py b/python/drydock_provisioner/orchestrator/__init__.py
similarity index 100%
rename from drydock_provisioner/orchestrator/__init__.py
rename to python/drydock_provisioner/orchestrator/__init__.py
diff --git a/drydock_provisioner/orchestrator/actions/__init__.py b/python/drydock_provisioner/orchestrator/actions/__init__.py
similarity index 100%
rename from drydock_provisioner/orchestrator/actions/__init__.py
rename to python/drydock_provisioner/orchestrator/actions/__init__.py
diff --git a/drydock_provisioner/orchestrator/actions/orchestrator.py b/python/drydock_provisioner/orchestrator/actions/orchestrator.py
similarity index 100%
rename from drydock_provisioner/orchestrator/actions/orchestrator.py
rename to python/drydock_provisioner/orchestrator/actions/orchestrator.py
diff --git a/drydock_provisioner/orchestrator/orchestrator.py b/python/drydock_provisioner/orchestrator/orchestrator.py
similarity index 100%
rename from drydock_provisioner/orchestrator/orchestrator.py
rename to python/drydock_provisioner/orchestrator/orchestrator.py
diff --git a/drydock_provisioner/orchestrator/readme.md b/python/drydock_provisioner/orchestrator/readme.md
similarity index 100%
rename from drydock_provisioner/orchestrator/readme.md
rename to python/drydock_provisioner/orchestrator/readme.md
diff --git a/drydock_provisioner/orchestrator/util.py b/python/drydock_provisioner/orchestrator/util.py
similarity index 100%
rename from drydock_provisioner/orchestrator/util.py
rename to python/drydock_provisioner/orchestrator/util.py
diff --git a/drydock_provisioner/orchestrator/validations/__init__.py b/python/drydock_provisioner/orchestrator/validations/__init__.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/__init__.py
rename to python/drydock_provisioner/orchestrator/validations/__init__.py
diff --git a/drydock_provisioner/orchestrator/validations/boot_storage_rational.py b/python/drydock_provisioner/orchestrator/validations/boot_storage_rational.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/boot_storage_rational.py
rename to python/drydock_provisioner/orchestrator/validations/boot_storage_rational.py
diff --git a/drydock_provisioner/orchestrator/validations/bootaction_validity.py b/python/drydock_provisioner/orchestrator/validations/bootaction_validity.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/bootaction_validity.py
rename to python/drydock_provisioner/orchestrator/validations/bootaction_validity.py
diff --git a/drydock_provisioner/orchestrator/validations/hostname_validity.py b/python/drydock_provisioner/orchestrator/validations/hostname_validity.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/hostname_validity.py
rename to python/drydock_provisioner/orchestrator/validations/hostname_validity.py
diff --git a/drydock_provisioner/orchestrator/validations/hugepages_validity.py b/python/drydock_provisioner/orchestrator/validations/hugepages_validity.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/hugepages_validity.py
rename to python/drydock_provisioner/orchestrator/validations/hugepages_validity.py
diff --git a/drydock_provisioner/orchestrator/validations/ip_locality_check.py b/python/drydock_provisioner/orchestrator/validations/ip_locality_check.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/ip_locality_check.py
rename to python/drydock_provisioner/orchestrator/validations/ip_locality_check.py
diff --git a/drydock_provisioner/orchestrator/validations/mtu_rational.py b/python/drydock_provisioner/orchestrator/validations/mtu_rational.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/mtu_rational.py
rename to python/drydock_provisioner/orchestrator/validations/mtu_rational.py
diff --git a/drydock_provisioner/orchestrator/validations/network_trunking_rational.py b/python/drydock_provisioner/orchestrator/validations/network_trunking_rational.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/network_trunking_rational.py
rename to python/drydock_provisioner/orchestrator/validations/network_trunking_rational.py
diff --git a/drydock_provisioner/orchestrator/validations/no_duplicate_ips_check.py b/python/drydock_provisioner/orchestrator/validations/no_duplicate_ips_check.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/no_duplicate_ips_check.py
rename to python/drydock_provisioner/orchestrator/validations/no_duplicate_ips_check.py
diff --git a/drydock_provisioner/orchestrator/validations/oob_valid_ipmi.py b/python/drydock_provisioner/orchestrator/validations/oob_valid_ipmi.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/oob_valid_ipmi.py
rename to python/drydock_provisioner/orchestrator/validations/oob_valid_ipmi.py
diff --git a/drydock_provisioner/orchestrator/validations/oob_valid_libvirt.py b/python/drydock_provisioner/orchestrator/validations/oob_valid_libvirt.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/oob_valid_libvirt.py
rename to python/drydock_provisioner/orchestrator/validations/oob_valid_libvirt.py
diff --git a/drydock_provisioner/orchestrator/validations/platform_selection.py b/python/drydock_provisioner/orchestrator/validations/platform_selection.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/platform_selection.py
rename to python/drydock_provisioner/orchestrator/validations/platform_selection.py
diff --git a/drydock_provisioner/orchestrator/validations/rational_network_bond.py b/python/drydock_provisioner/orchestrator/validations/rational_network_bond.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/rational_network_bond.py
rename to python/drydock_provisioner/orchestrator/validations/rational_network_bond.py
diff --git a/drydock_provisioner/orchestrator/validations/storage_partititioning.py b/python/drydock_provisioner/orchestrator/validations/storage_partititioning.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/storage_partititioning.py
rename to python/drydock_provisioner/orchestrator/validations/storage_partititioning.py
diff --git a/drydock_provisioner/orchestrator/validations/storage_sizing.py b/python/drydock_provisioner/orchestrator/validations/storage_sizing.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/storage_sizing.py
rename to python/drydock_provisioner/orchestrator/validations/storage_sizing.py
diff --git a/drydock_provisioner/orchestrator/validations/unique_network_check.py b/python/drydock_provisioner/orchestrator/validations/unique_network_check.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/unique_network_check.py
rename to python/drydock_provisioner/orchestrator/validations/unique_network_check.py
diff --git a/drydock_provisioner/orchestrator/validations/validator.py b/python/drydock_provisioner/orchestrator/validations/validator.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/validator.py
rename to python/drydock_provisioner/orchestrator/validations/validator.py
diff --git a/drydock_provisioner/orchestrator/validations/validators.py b/python/drydock_provisioner/orchestrator/validations/validators.py
similarity index 100%
rename from drydock_provisioner/orchestrator/validations/validators.py
rename to python/drydock_provisioner/orchestrator/validations/validators.py
diff --git a/drydock_provisioner/policy.py b/python/drydock_provisioner/policy.py
similarity index 100%
rename from drydock_provisioner/policy.py
rename to python/drydock_provisioner/policy.py
diff --git a/drydock_provisioner/schemas/baremetalNode.yaml b/python/drydock_provisioner/schemas/baremetalNode.yaml
similarity index 100%
rename from drydock_provisioner/schemas/baremetalNode.yaml
rename to python/drydock_provisioner/schemas/baremetalNode.yaml
diff --git a/drydock_provisioner/schemas/bootaction.yaml b/python/drydock_provisioner/schemas/bootaction.yaml
similarity index 100%
rename from drydock_provisioner/schemas/bootaction.yaml
rename to python/drydock_provisioner/schemas/bootaction.yaml
diff --git a/drydock_provisioner/schemas/hardwareProfile.yaml b/python/drydock_provisioner/schemas/hardwareProfile.yaml
similarity index 100%
rename from drydock_provisioner/schemas/hardwareProfile.yaml
rename to python/drydock_provisioner/schemas/hardwareProfile.yaml
diff --git a/drydock_provisioner/schemas/hostProfile.yaml b/python/drydock_provisioner/schemas/hostProfile.yaml
similarity index 100%
rename from drydock_provisioner/schemas/hostProfile.yaml
rename to python/drydock_provisioner/schemas/hostProfile.yaml
diff --git a/drydock_provisioner/schemas/network.yaml b/python/drydock_provisioner/schemas/network.yaml
similarity index 100%
rename from drydock_provisioner/schemas/network.yaml
rename to python/drydock_provisioner/schemas/network.yaml
diff --git a/drydock_provisioner/schemas/networkLink.yaml b/python/drydock_provisioner/schemas/networkLink.yaml
similarity index 100%
rename from drydock_provisioner/schemas/networkLink.yaml
rename to python/drydock_provisioner/schemas/networkLink.yaml
diff --git a/drydock_provisioner/schemas/rack.yaml b/python/drydock_provisioner/schemas/rack.yaml
similarity index 100%
rename from drydock_provisioner/schemas/rack.yaml
rename to python/drydock_provisioner/schemas/rack.yaml
diff --git a/drydock_provisioner/schemas/region.yaml b/python/drydock_provisioner/schemas/region.yaml
similarity index 100%
rename from drydock_provisioner/schemas/region.yaml
rename to python/drydock_provisioner/schemas/region.yaml
diff --git a/drydock_provisioner/statemgmt/__init__.py b/python/drydock_provisioner/statemgmt/__init__.py
similarity index 100%
rename from drydock_provisioner/statemgmt/__init__.py
rename to python/drydock_provisioner/statemgmt/__init__.py
diff --git a/drydock_provisioner/statemgmt/db/__init__.py b/python/drydock_provisioner/statemgmt/db/__init__.py
similarity index 100%
rename from drydock_provisioner/statemgmt/db/__init__.py
rename to python/drydock_provisioner/statemgmt/db/__init__.py
diff --git a/drydock_provisioner/statemgmt/db/tables.py b/python/drydock_provisioner/statemgmt/db/tables.py
similarity index 100%
rename from drydock_provisioner/statemgmt/db/tables.py
rename to python/drydock_provisioner/statemgmt/db/tables.py
diff --git a/drydock_provisioner/statemgmt/design/__init__.py b/python/drydock_provisioner/statemgmt/design/__init__.py
similarity index 100%
rename from drydock_provisioner/statemgmt/design/__init__.py
rename to python/drydock_provisioner/statemgmt/design/__init__.py
diff --git a/drydock_provisioner/statemgmt/design/resolver.py b/python/drydock_provisioner/statemgmt/design/resolver.py
similarity index 100%
rename from drydock_provisioner/statemgmt/design/resolver.py
rename to python/drydock_provisioner/statemgmt/design/resolver.py
diff --git a/drydock_provisioner/statemgmt/readme.rst b/python/drydock_provisioner/statemgmt/readme.rst
similarity index 100%
rename from drydock_provisioner/statemgmt/readme.rst
rename to python/drydock_provisioner/statemgmt/readme.rst
diff --git a/drydock_provisioner/statemgmt/state.py b/python/drydock_provisioner/statemgmt/state.py
similarity index 100%
rename from drydock_provisioner/statemgmt/state.py
rename to python/drydock_provisioner/statemgmt/state.py
diff --git a/drydock_provisioner/util.py b/python/drydock_provisioner/util.py
similarity index 100%
rename from drydock_provisioner/util.py
rename to python/drydock_provisioner/util.py
diff --git a/requirements-direct.txt b/python/requirements-direct.txt
similarity index 100%
rename from requirements-direct.txt
rename to python/requirements-direct.txt
diff --git a/requirements-lock.txt b/python/requirements-lock.txt
similarity index 78%
rename from requirements-lock.txt
rename to python/requirements-lock.txt
index e127932b..9d448237 100644
--- a/requirements-lock.txt
+++ b/python/requirements-lock.txt
@@ -3,17 +3,18 @@ amqp==2.3.2
 Babel==2.6.0
 Beaker==1.9.1
 cachetools==2.1.0
-certifi==2018.4.16
+certifi==2018.8.13
 chardet==3.0.4
 click==6.7
 contextlib2==0.5.5
-debtcollector==1.19.0
+debtcollector==1.20.0
 defusedxml==0.5.0
-eventlet==0.23.0
+dnspython==1.15.0
+eventlet==0.24.1
 falcon==1.4.1
 fasteners==0.14.1
 futurist==1.7.0
-greenlet==0.4.13
+greenlet==0.4.14
 idna==2.7
 iso8601==0.1.11
 Jinja2==2.9.6
@@ -32,24 +33,24 @@ oauthlib==2.1.0
 oslo.concurrency==3.27.0
 oslo.config==5.2.0
 oslo.context==2.21.0
-oslo.i18n==3.20.0
+oslo.i18n==3.21.0
 oslo.log==3.39.0
-oslo.messaging==6.5.0
-oslo.middleware==3.35.0
+oslo.messaging==8.1.0
+oslo.middleware==3.36.0
 oslo.policy==1.22.1
 oslo.serialization==2.27.0
-oslo.service==1.31.2
-oslo.utils==3.36.3
+oslo.service==1.31.3
+oslo.utils==3.36.4
 oslo.versionedobjects==1.23.0
 Paste==2.0.3
 PasteDeploy==1.5.2
-pbr==4.0.4
-pip==10.0.1
+pbr==4.2.0
+pip==18.0
 positional==1.2.1
 prettytable==0.7.2
 psycopg2==2.7.3.1
 PTable==0.9.2
-pycadf==2.7.0
+pycadf==2.8.0
 pycrypto==2.6.1
 pyghmi==1.0.18
 pymongo==3.6.1
@@ -58,18 +59,18 @@ python-dateutil==2.7.3
 python-editor==1.0.3
 python-keystoneclient==3.17.0
 python-mimeparse==1.6.0
-pytz==2018.4
+pytz==2018.5
 PyYAML==3.12
 repoze.lru==0.7
 requests==2.19.1
 rfc3986==1.1.0
 Routes==2.4.1
-setuptools==39.2.0
+setuptools==40.2.0
 six==1.11.0
 SQLAlchemy==1.2.8
 statsd==3.2.2
-stevedore==1.28.0
-tenacity==4.12.0
+stevedore==1.29.0
+tenacity==5.0.1
 ulid2==0.1.1
 urllib3==1.23
 uWSGI==2.0.15
diff --git a/requirements-test.txt b/python/requirements-test.txt
similarity index 100%
rename from requirements-test.txt
rename to python/requirements-test.txt
diff --git a/setup.py b/python/setup.py
similarity index 96%
rename from setup.py
rename to python/setup.py
index b5d99b25..a35d2948 100644
--- a/setup.py
+++ b/python/setup.py
@@ -27,7 +27,7 @@ setup(
     license='Apache 2.0',
     packages=find_packages(),
     package_data={
-        '': ['schemas/*.yaml'],
+        '': ['schemas/*.yaml', 'assets/baclient'],
     },
     entry_points={
         'oslo.config.opts':
diff --git a/tests/conftest.py b/python/tests/conftest.py
similarity index 100%
rename from tests/conftest.py
rename to python/tests/conftest.py
diff --git a/tests/integration/postgres/test_action_config_node_prov.py b/python/tests/integration/postgres/test_action_config_node_prov.py
similarity index 100%
rename from tests/integration/postgres/test_action_config_node_prov.py
rename to python/tests/integration/postgres/test_action_config_node_prov.py
diff --git a/tests/integration/postgres/test_action_prepare_nodes.py b/python/tests/integration/postgres/test_action_prepare_nodes.py
similarity index 100%
rename from tests/integration/postgres/test_action_prepare_nodes.py
rename to python/tests/integration/postgres/test_action_prepare_nodes.py
diff --git a/tests/integration/postgres/test_action_prepare_site.py b/python/tests/integration/postgres/test_action_prepare_site.py
similarity index 100%
rename from tests/integration/postgres/test_action_prepare_site.py
rename to python/tests/integration/postgres/test_action_prepare_site.py
diff --git a/tests/integration/postgres/test_api_bootaction.py b/python/tests/integration/postgres/test_api_bootaction.py
similarity index 100%
rename from tests/integration/postgres/test_api_bootaction.py
rename to python/tests/integration/postgres/test_api_bootaction.py
diff --git a/tests/integration/postgres/test_api_bootaction_status.py b/python/tests/integration/postgres/test_api_bootaction_status.py
similarity index 100%
rename from tests/integration/postgres/test_api_bootaction_status.py
rename to python/tests/integration/postgres/test_api_bootaction_status.py
diff --git a/tests/integration/postgres/test_api_builddata.py b/python/tests/integration/postgres/test_api_builddata.py
similarity index 100%
rename from tests/integration/postgres/test_api_builddata.py
rename to python/tests/integration/postgres/test_api_builddata.py
diff --git a/tests/integration/postgres/test_api_health.py b/python/tests/integration/postgres/test_api_health.py
similarity index 100%
rename from tests/integration/postgres/test_api_health.py
rename to python/tests/integration/postgres/test_api_health.py
diff --git a/tests/integration/postgres/test_api_tasks.py b/python/tests/integration/postgres/test_api_tasks.py
similarity index 100%
rename from tests/integration/postgres/test_api_tasks.py
rename to python/tests/integration/postgres/test_api_tasks.py
diff --git a/tests/integration/postgres/test_bootaction_context.py b/python/tests/integration/postgres/test_bootaction_context.py
similarity index 100%
rename from tests/integration/postgres/test_bootaction_context.py
rename to python/tests/integration/postgres/test_bootaction_context.py
diff --git a/tests/integration/postgres/test_bootaction_signalling.py b/python/tests/integration/postgres/test_bootaction_signalling.py
similarity index 100%
rename from tests/integration/postgres/test_bootaction_signalling.py
rename to python/tests/integration/postgres/test_bootaction_signalling.py
diff --git a/tests/integration/postgres/test_build_data_collection.py b/python/tests/integration/postgres/test_build_data_collection.py
similarity index 100%
rename from tests/integration/postgres/test_build_data_collection.py
rename to python/tests/integration/postgres/test_build_data_collection.py
diff --git a/tests/integration/postgres/test_noderesult_links.py b/python/tests/integration/postgres/test_noderesult_links.py
similarity index 100%
rename from tests/integration/postgres/test_noderesult_links.py
rename to python/tests/integration/postgres/test_noderesult_links.py
diff --git a/tests/integration/postgres/test_orch_generic.py b/python/tests/integration/postgres/test_orch_generic.py
similarity index 100%
rename from tests/integration/postgres/test_orch_generic.py
rename to python/tests/integration/postgres/test_orch_generic.py
diff --git a/tests/integration/postgres/test_postgres_bootaction_status.py b/python/tests/integration/postgres/test_postgres_bootaction_status.py
similarity index 100%
rename from tests/integration/postgres/test_postgres_bootaction_status.py
rename to python/tests/integration/postgres/test_postgres_bootaction_status.py
diff --git a/tests/integration/postgres/test_postgres_builddata.py b/python/tests/integration/postgres/test_postgres_builddata.py
similarity index 100%
rename from tests/integration/postgres/test_postgres_builddata.py
rename to python/tests/integration/postgres/test_postgres_builddata.py
diff --git a/tests/integration/postgres/test_postgres_leadership.py b/python/tests/integration/postgres/test_postgres_leadership.py
similarity index 100%
rename from tests/integration/postgres/test_postgres_leadership.py
rename to python/tests/integration/postgres/test_postgres_leadership.py
diff --git a/tests/integration/postgres/test_postgres_results.py b/python/tests/integration/postgres/test_postgres_results.py
similarity index 100%
rename from tests/integration/postgres/test_postgres_results.py
rename to python/tests/integration/postgres/test_postgres_results.py
diff --git a/tests/integration/postgres/test_postgres_tasks.py b/python/tests/integration/postgres/test_postgres_tasks.py
similarity index 100%
rename from tests/integration/postgres/test_postgres_tasks.py
rename to python/tests/integration/postgres/test_postgres_tasks.py
diff --git a/tests/integration/test_maasdriver_client.py b/python/tests/integration/test_maasdriver_client.py
similarity index 100%
rename from tests/integration/test_maasdriver_client.py
rename to python/tests/integration/test_maasdriver_client.py
diff --git a/tests/integration/test_maasdriver_network.py b/python/tests/integration/test_maasdriver_network.py
similarity index 100%
rename from tests/integration/test_maasdriver_network.py
rename to python/tests/integration/test_maasdriver_network.py
diff --git a/tests/postgres/start_postgres.sh b/python/tests/postgres/start_postgres.sh
similarity index 100%
rename from tests/postgres/start_postgres.sh
rename to python/tests/postgres/start_postgres.sh
diff --git a/tests/postgres/stop_postgres.sh b/python/tests/postgres/stop_postgres.sh
similarity index 100%
rename from tests/postgres/stop_postgres.sh
rename to python/tests/postgres/stop_postgres.sh
diff --git a/tests/unit/test_api_nodes_unit.py b/python/tests/unit/test_api_nodes_unit.py
similarity index 100%
rename from tests/unit/test_api_nodes_unit.py
rename to python/tests/unit/test_api_nodes_unit.py
diff --git a/tests/unit/test_api_tasks_unit.py b/python/tests/unit/test_api_tasks_unit.py
similarity index 100%
rename from tests/unit/test_api_tasks_unit.py
rename to python/tests/unit/test_api_tasks_unit.py
diff --git a/tests/unit/test_api_validation.py b/python/tests/unit/test_api_validation.py
similarity index 100%
rename from tests/unit/test_api_validation.py
rename to python/tests/unit/test_api_validation.py
diff --git a/tests/unit/test_api_versions.py b/python/tests/unit/test_api_versions.py
similarity index 100%
rename from tests/unit/test_api_versions.py
rename to python/tests/unit/test_api_versions.py
diff --git a/tests/unit/test_apienforcer.py b/python/tests/unit/test_apienforcer.py
similarity index 100%
rename from tests/unit/test_apienforcer.py
rename to python/tests/unit/test_apienforcer.py
diff --git a/tests/unit/test_auth_middleware.py b/python/tests/unit/test_auth_middleware.py
similarity index 100%
rename from tests/unit/test_auth_middleware.py
rename to python/tests/unit/test_auth_middleware.py
diff --git a/tests/unit/test_bootaction_asset_render.py b/python/tests/unit/test_bootaction_asset_render.py
similarity index 100%
rename from tests/unit/test_bootaction_asset_render.py
rename to python/tests/unit/test_bootaction_asset_render.py
diff --git a/tests/unit/test_bootaction_pipeline.py b/python/tests/unit/test_bootaction_pipeline.py
similarity index 100%
rename from tests/unit/test_bootaction_pipeline.py
rename to python/tests/unit/test_bootaction_pipeline.py
diff --git a/tests/unit/test_bootaction_scoping.py b/python/tests/unit/test_bootaction_scoping.py
similarity index 100%
rename from tests/unit/test_bootaction_scoping.py
rename to python/tests/unit/test_bootaction_scoping.py
diff --git a/tests/unit/test_bootaction_tarbuilder.py b/python/tests/unit/test_bootaction_tarbuilder.py
similarity index 100%
rename from tests/unit/test_bootaction_tarbuilder.py
rename to python/tests/unit/test_bootaction_tarbuilder.py
diff --git a/tests/unit/test_cli_task.py b/python/tests/unit/test_cli_task.py
similarity index 100%
rename from tests/unit/test_cli_task.py
rename to python/tests/unit/test_cli_task.py
diff --git a/tests/unit/test_design_inheritance.py b/python/tests/unit/test_design_inheritance.py
similarity index 100%
rename from tests/unit/test_design_inheritance.py
rename to python/tests/unit/test_design_inheritance.py
diff --git a/tests/unit/test_drydock_client.py b/python/tests/unit/test_drydock_client.py
similarity index 100%
rename from tests/unit/test_drydock_client.py
rename to python/tests/unit/test_drydock_client.py
diff --git a/tests/unit/test_drydock_client_session.py b/python/tests/unit/test_drydock_client_session.py
similarity index 100%
rename from tests/unit/test_drydock_client_session.py
rename to python/tests/unit/test_drydock_client_session.py
diff --git a/tests/unit/test_ingester.py b/python/tests/unit/test_ingester.py
similarity index 100%
rename from tests/unit/test_ingester.py
rename to python/tests/unit/test_ingester.py
diff --git a/tests/unit/test_ingester_bootaction.py b/python/tests/unit/test_ingester_bootaction.py
similarity index 100%
rename from tests/unit/test_ingester_bootaction.py
rename to python/tests/unit/test_ingester_bootaction.py
diff --git a/tests/unit/test_ingester_invalidation.py b/python/tests/unit/test_ingester_invalidation.py
similarity index 100%
rename from tests/unit/test_ingester_invalidation.py
rename to python/tests/unit/test_ingester_invalidation.py
diff --git a/tests/unit/test_ingester_rack_model.py b/python/tests/unit/test_ingester_rack_model.py
similarity index 100%
rename from tests/unit/test_ingester_rack_model.py
rename to python/tests/unit/test_ingester_rack_model.py
diff --git a/tests/unit/test_libvirt_driver.py b/python/tests/unit/test_libvirt_driver.py
similarity index 100%
rename from tests/unit/test_libvirt_driver.py
rename to python/tests/unit/test_libvirt_driver.py
diff --git a/tests/unit/test_maasdriver_calculate_bytes.py b/python/tests/unit/test_maasdriver_calculate_bytes.py
similarity index 100%
rename from tests/unit/test_maasdriver_calculate_bytes.py
rename to python/tests/unit/test_maasdriver_calculate_bytes.py
diff --git a/tests/unit/test_maasdriver_noderesults.py b/python/tests/unit/test_maasdriver_noderesults.py
similarity index 100%
rename from tests/unit/test_maasdriver_noderesults.py
rename to python/tests/unit/test_maasdriver_noderesults.py
diff --git a/tests/unit/test_models.py b/python/tests/unit/test_models.py
similarity index 100%
rename from tests/unit/test_models.py
rename to python/tests/unit/test_models.py
diff --git a/tests/unit/test_node_logicalnames.py b/python/tests/unit/test_node_logicalnames.py
similarity index 100%
rename from tests/unit/test_node_logicalnames.py
rename to python/tests/unit/test_node_logicalnames.py
diff --git a/tests/unit/test_node_naming.py b/python/tests/unit/test_node_naming.py
similarity index 100%
rename from tests/unit/test_node_naming.py
rename to python/tests/unit/test_node_naming.py
diff --git a/tests/unit/test_orch_node_filter.py b/python/tests/unit/test_orch_node_filter.py
similarity index 100%
rename from tests/unit/test_orch_node_filter.py
rename to python/tests/unit/test_orch_node_filter.py
diff --git a/tests/unit/test_param_reference.py b/python/tests/unit/test_param_reference.py
similarity index 100%
rename from tests/unit/test_param_reference.py
rename to python/tests/unit/test_param_reference.py
diff --git a/tests/unit/test_policy_engine.py b/python/tests/unit/test_policy_engine.py
similarity index 100%
rename from tests/unit/test_policy_engine.py
rename to python/tests/unit/test_policy_engine.py
diff --git a/tests/unit/test_reference_resolver.py b/python/tests/unit/test_reference_resolver.py
similarity index 100%
rename from tests/unit/test_reference_resolver.py
rename to python/tests/unit/test_reference_resolver.py
diff --git a/tests/unit/test_render_routedomain.py b/python/tests/unit/test_render_routedomain.py
similarity index 100%
rename from tests/unit/test_render_routedomain.py
rename to python/tests/unit/test_render_routedomain.py
diff --git a/tests/unit/test_schema_validation.py b/python/tests/unit/test_schema_validation.py
similarity index 100%
rename from tests/unit/test_schema_validation.py
rename to python/tests/unit/test_schema_validation.py
diff --git a/tests/unit/test_task_link.py b/python/tests/unit/test_task_link.py
similarity index 100%
rename from tests/unit/test_task_link.py
rename to python/tests/unit/test_task_link.py
diff --git a/tests/unit/test_task_node_filter.py b/python/tests/unit/test_task_node_filter.py
similarity index 100%
rename from tests/unit/test_task_node_filter.py
rename to python/tests/unit/test_task_node_filter.py
diff --git a/tests/unit/test_validate_design.py b/python/tests/unit/test_validate_design.py
similarity index 100%
rename from tests/unit/test_validate_design.py
rename to python/tests/unit/test_validate_design.py
diff --git a/tests/unit/test_validation_rule_boot_storage.py b/python/tests/unit/test_validation_rule_boot_storage.py
similarity index 100%
rename from tests/unit/test_validation_rule_boot_storage.py
rename to python/tests/unit/test_validation_rule_boot_storage.py
diff --git a/tests/unit/test_validation_rule_bootactions.py b/python/tests/unit/test_validation_rule_bootactions.py
similarity index 100%
rename from tests/unit/test_validation_rule_bootactions.py
rename to python/tests/unit/test_validation_rule_bootactions.py
diff --git a/tests/unit/test_validation_rule_hostname_validity.py b/python/tests/unit/test_validation_rule_hostname_validity.py
similarity index 100%
rename from tests/unit/test_validation_rule_hostname_validity.py
rename to python/tests/unit/test_validation_rule_hostname_validity.py
diff --git a/tests/unit/test_validation_rule_hugepages.py b/python/tests/unit/test_validation_rule_hugepages.py
similarity index 100%
rename from tests/unit/test_validation_rule_hugepages.py
rename to python/tests/unit/test_validation_rule_hugepages.py
diff --git a/tests/unit/test_validation_rule_ip_locality.py b/python/tests/unit/test_validation_rule_ip_locality.py
similarity index 100%
rename from tests/unit/test_validation_rule_ip_locality.py
rename to python/tests/unit/test_validation_rule_ip_locality.py
diff --git a/tests/unit/test_validation_rule_mtu_rational.py b/python/tests/unit/test_validation_rule_mtu_rational.py
similarity index 100%
rename from tests/unit/test_validation_rule_mtu_rational.py
rename to python/tests/unit/test_validation_rule_mtu_rational.py
diff --git a/tests/unit/test_validation_rule_network_bond.py b/python/tests/unit/test_validation_rule_network_bond.py
similarity index 100%
rename from tests/unit/test_validation_rule_network_bond.py
rename to python/tests/unit/test_validation_rule_network_bond.py
diff --git a/tests/unit/test_validation_rule_network_trunking.py b/python/tests/unit/test_validation_rule_network_trunking.py
similarity index 100%
rename from tests/unit/test_validation_rule_network_trunking.py
rename to python/tests/unit/test_validation_rule_network_trunking.py
diff --git a/tests/unit/test_validation_rule_no_duplicate_IPs.py b/python/tests/unit/test_validation_rule_no_duplicate_IPs.py
similarity index 100%
rename from tests/unit/test_validation_rule_no_duplicate_IPs.py
rename to python/tests/unit/test_validation_rule_no_duplicate_IPs.py
diff --git a/tests/unit/test_validation_rule_storage_partitioning.py b/python/tests/unit/test_validation_rule_storage_partitioning.py
similarity index 100%
rename from tests/unit/test_validation_rule_storage_partitioning.py
rename to python/tests/unit/test_validation_rule_storage_partitioning.py
diff --git a/tests/unit/test_validation_rule_storage_sizing.py b/python/tests/unit/test_validation_rule_storage_sizing.py
similarity index 100%
rename from tests/unit/test_validation_rule_storage_sizing.py
rename to python/tests/unit/test_validation_rule_storage_sizing.py
diff --git a/tests/unit/test_validation_rule_unique_network.py b/python/tests/unit/test_validation_rule_unique_network.py
similarity index 100%
rename from tests/unit/test_validation_rule_unique_network.py
rename to python/tests/unit/test_validation_rule_unique_network.py
diff --git a/tests/unit/test_validation_rule_valid_platform.py b/python/tests/unit/test_validation_rule_valid_platform.py
similarity index 100%
rename from tests/unit/test_validation_rule_valid_platform.py
rename to python/tests/unit/test_validation_rule_valid_platform.py
diff --git a/tests/yaml_samples/absent_bootaction.yaml b/python/tests/yaml_samples/absent_bootaction.yaml
similarity index 100%
rename from tests/yaml_samples/absent_bootaction.yaml
rename to python/tests/yaml_samples/absent_bootaction.yaml
diff --git a/tests/yaml_samples/baremetalNode.yaml b/python/tests/yaml_samples/baremetalNode.yaml
similarity index 100%
rename from tests/yaml_samples/baremetalNode.yaml
rename to python/tests/yaml_samples/baremetalNode.yaml
diff --git a/tests/yaml_samples/baremetalNode2.yaml b/python/tests/yaml_samples/baremetalNode2.yaml
similarity index 100%
rename from tests/yaml_samples/baremetalNode2.yaml
rename to python/tests/yaml_samples/baremetalNode2.yaml
diff --git a/tests/yaml_samples/deckhand_bootaction.yaml b/python/tests/yaml_samples/deckhand_bootaction.yaml
similarity index 100%
rename from tests/yaml_samples/deckhand_bootaction.yaml
rename to python/tests/yaml_samples/deckhand_bootaction.yaml
diff --git a/tests/yaml_samples/deckhand_fullsite.yaml b/python/tests/yaml_samples/deckhand_fullsite.yaml
similarity index 100%
rename from tests/yaml_samples/deckhand_fullsite.yaml
rename to python/tests/yaml_samples/deckhand_fullsite.yaml
diff --git a/tests/yaml_samples/deckhand_fullsite_bad_hugepages.yaml b/python/tests/yaml_samples/deckhand_fullsite_bad_hugepages.yaml
similarity index 100%
rename from tests/yaml_samples/deckhand_fullsite_bad_hugepages.yaml
rename to python/tests/yaml_samples/deckhand_fullsite_bad_hugepages.yaml
diff --git a/tests/yaml_samples/deckhand_fullsite_libvirt.yaml b/python/tests/yaml_samples/deckhand_fullsite_libvirt.yaml
similarity index 100%
rename from tests/yaml_samples/deckhand_fullsite_libvirt.yaml
rename to python/tests/yaml_samples/deckhand_fullsite_libvirt.yaml
diff --git a/tests/yaml_samples/deckhand_fullsite_no_nodes.yaml b/python/tests/yaml_samples/deckhand_fullsite_no_nodes.yaml
similarity index 100%
rename from tests/yaml_samples/deckhand_fullsite_no_nodes.yaml
rename to python/tests/yaml_samples/deckhand_fullsite_no_nodes.yaml
diff --git a/tests/yaml_samples/deckhand_routedomain.yaml b/python/tests/yaml_samples/deckhand_routedomain.yaml
similarity index 100%
rename from tests/yaml_samples/deckhand_routedomain.yaml
rename to python/tests/yaml_samples/deckhand_routedomain.yaml
diff --git a/tests/yaml_samples/fullsite.yaml b/python/tests/yaml_samples/fullsite.yaml
similarity index 100%
rename from tests/yaml_samples/fullsite.yaml
rename to python/tests/yaml_samples/fullsite.yaml
diff --git a/tests/yaml_samples/fullsite_networks.yaml b/python/tests/yaml_samples/fullsite_networks.yaml
similarity index 100%
rename from tests/yaml_samples/fullsite_networks.yaml
rename to python/tests/yaml_samples/fullsite_networks.yaml
diff --git a/tests/yaml_samples/fullsite_nodes.yaml b/python/tests/yaml_samples/fullsite_nodes.yaml
similarity index 100%
rename from tests/yaml_samples/fullsite_nodes.yaml
rename to python/tests/yaml_samples/fullsite_nodes.yaml
diff --git a/tests/yaml_samples/fullsite_profiles.yaml b/python/tests/yaml_samples/fullsite_profiles.yaml
similarity index 100%
rename from tests/yaml_samples/fullsite_profiles.yaml
rename to python/tests/yaml_samples/fullsite_profiles.yaml
diff --git a/tests/yaml_samples/hardwareProfile.yaml b/python/tests/yaml_samples/hardwareProfile.yaml
similarity index 100%
rename from tests/yaml_samples/hardwareProfile.yaml
rename to python/tests/yaml_samples/hardwareProfile.yaml
diff --git a/tests/yaml_samples/hostProfile.yaml b/python/tests/yaml_samples/hostProfile.yaml
similarity index 100%
rename from tests/yaml_samples/hostProfile.yaml
rename to python/tests/yaml_samples/hostProfile.yaml
diff --git a/tests/yaml_samples/hostProfile2.yaml b/python/tests/yaml_samples/hostProfile2.yaml
similarity index 100%
rename from tests/yaml_samples/hostProfile2.yaml
rename to python/tests/yaml_samples/hostProfile2.yaml
diff --git a/tests/yaml_samples/hostprof.yaml b/python/tests/yaml_samples/hostprof.yaml
similarity index 100%
rename from tests/yaml_samples/hostprof.yaml
rename to python/tests/yaml_samples/hostprof.yaml
diff --git a/tests/yaml_samples/invalid.yaml b/python/tests/yaml_samples/invalid.yaml
similarity index 100%
rename from tests/yaml_samples/invalid.yaml
rename to python/tests/yaml_samples/invalid.yaml
diff --git a/tests/yaml_samples/invalid_baremetalNode.yaml b/python/tests/yaml_samples/invalid_baremetalNode.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_baremetalNode.yaml
rename to python/tests/yaml_samples/invalid_baremetalNode.yaml
diff --git a/tests/yaml_samples/invalid_baremetalNode2.yaml b/python/tests/yaml_samples/invalid_baremetalNode2.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_baremetalNode2.yaml
rename to python/tests/yaml_samples/invalid_baremetalNode2.yaml
diff --git a/tests/yaml_samples/invalid_boot_storage_small.yaml b/python/tests/yaml_samples/invalid_boot_storage_small.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_boot_storage_small.yaml
rename to python/tests/yaml_samples/invalid_boot_storage_small.yaml
diff --git a/tests/yaml_samples/invalid_bootaction.yaml b/python/tests/yaml_samples/invalid_bootaction.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_bootaction.yaml
rename to python/tests/yaml_samples/invalid_bootaction.yaml
diff --git a/tests/yaml_samples/invalid_bootaction_pkg.yaml b/python/tests/yaml_samples/invalid_bootaction_pkg.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_bootaction_pkg.yaml
rename to python/tests/yaml_samples/invalid_bootaction_pkg.yaml
diff --git a/tests/yaml_samples/invalid_hardwareProfile.yaml b/python/tests/yaml_samples/invalid_hardwareProfile.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_hardwareProfile.yaml
rename to python/tests/yaml_samples/invalid_hardwareProfile.yaml
diff --git a/tests/yaml_samples/invalid_hostProfile.yaml b/python/tests/yaml_samples/invalid_hostProfile.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_hostProfile.yaml
rename to python/tests/yaml_samples/invalid_hostProfile.yaml
diff --git a/tests/yaml_samples/invalid_hostProfile2.yaml b/python/tests/yaml_samples/invalid_hostProfile2.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_hostProfile2.yaml
rename to python/tests/yaml_samples/invalid_hostProfile2.yaml
diff --git a/tests/yaml_samples/invalid_hugepages.yaml b/python/tests/yaml_samples/invalid_hugepages.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_hugepages.yaml
rename to python/tests/yaml_samples/invalid_hugepages.yaml
diff --git a/tests/yaml_samples/invalid_kernel.yaml b/python/tests/yaml_samples/invalid_kernel.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_kernel.yaml
rename to python/tests/yaml_samples/invalid_kernel.yaml
diff --git a/tests/yaml_samples/invalid_network.yaml b/python/tests/yaml_samples/invalid_network.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_network.yaml
rename to python/tests/yaml_samples/invalid_network.yaml
diff --git a/tests/yaml_samples/invalid_network2.yaml b/python/tests/yaml_samples/invalid_network2.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_network2.yaml
rename to python/tests/yaml_samples/invalid_network2.yaml
diff --git a/tests/yaml_samples/invalid_network3.yaml b/python/tests/yaml_samples/invalid_network3.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_network3.yaml
rename to python/tests/yaml_samples/invalid_network3.yaml
diff --git a/tests/yaml_samples/invalid_network4.yaml b/python/tests/yaml_samples/invalid_network4.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_network4.yaml
rename to python/tests/yaml_samples/invalid_network4.yaml
diff --git a/tests/yaml_samples/invalid_network5.yaml b/python/tests/yaml_samples/invalid_network5.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_network5.yaml
rename to python/tests/yaml_samples/invalid_network5.yaml
diff --git a/tests/yaml_samples/invalid_networkLink.yaml b/python/tests/yaml_samples/invalid_networkLink.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_networkLink.yaml
rename to python/tests/yaml_samples/invalid_networkLink.yaml
diff --git a/tests/yaml_samples/invalid_networkLink2.yaml b/python/tests/yaml_samples/invalid_networkLink2.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_networkLink2.yaml
rename to python/tests/yaml_samples/invalid_networkLink2.yaml
diff --git a/tests/yaml_samples/invalid_networkLink3.yaml b/python/tests/yaml_samples/invalid_networkLink3.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_networkLink3.yaml
rename to python/tests/yaml_samples/invalid_networkLink3.yaml
diff --git a/tests/yaml_samples/invalid_rack.yaml b/python/tests/yaml_samples/invalid_rack.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_rack.yaml
rename to python/tests/yaml_samples/invalid_rack.yaml
diff --git a/tests/yaml_samples/invalid_rational_network_trunking.yaml b/python/tests/yaml_samples/invalid_rational_network_trunking.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_rational_network_trunking.yaml
rename to python/tests/yaml_samples/invalid_rational_network_trunking.yaml
diff --git a/tests/yaml_samples/invalid_region.yaml b/python/tests/yaml_samples/invalid_region.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_region.yaml
rename to python/tests/yaml_samples/invalid_region.yaml
diff --git a/tests/yaml_samples/invalid_unique_network.yaml b/python/tests/yaml_samples/invalid_unique_network.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_unique_network.yaml
rename to python/tests/yaml_samples/invalid_unique_network.yaml
diff --git a/tests/yaml_samples/invalid_validation.yaml b/python/tests/yaml_samples/invalid_validation.yaml
similarity index 100%
rename from tests/yaml_samples/invalid_validation.yaml
rename to python/tests/yaml_samples/invalid_validation.yaml
diff --git a/tests/yaml_samples/ip_locality_no_gateway.yaml b/python/tests/yaml_samples/ip_locality_no_gateway.yaml
similarity index 100%
rename from tests/yaml_samples/ip_locality_no_gateway.yaml
rename to python/tests/yaml_samples/ip_locality_no_gateway.yaml
diff --git a/tests/yaml_samples/ip_locality_no_networks.yaml b/python/tests/yaml_samples/ip_locality_no_networks.yaml
similarity index 100%
rename from tests/yaml_samples/ip_locality_no_networks.yaml
rename to python/tests/yaml_samples/ip_locality_no_networks.yaml
diff --git a/tests/yaml_samples/multidoc.yaml b/python/tests/yaml_samples/multidoc.yaml
similarity index 100%
rename from tests/yaml_samples/multidoc.yaml
rename to python/tests/yaml_samples/multidoc.yaml
diff --git a/tests/yaml_samples/network.yaml b/python/tests/yaml_samples/network.yaml
similarity index 100%
rename from tests/yaml_samples/network.yaml
rename to python/tests/yaml_samples/network.yaml
diff --git a/tests/yaml_samples/network2.yaml b/python/tests/yaml_samples/network2.yaml
similarity index 100%
rename from tests/yaml_samples/network2.yaml
rename to python/tests/yaml_samples/network2.yaml
diff --git a/tests/yaml_samples/network3.yaml b/python/tests/yaml_samples/network3.yaml
similarity index 100%
rename from tests/yaml_samples/network3.yaml
rename to python/tests/yaml_samples/network3.yaml
diff --git a/tests/yaml_samples/network4.yaml b/python/tests/yaml_samples/network4.yaml
similarity index 100%
rename from tests/yaml_samples/network4.yaml
rename to python/tests/yaml_samples/network4.yaml
diff --git a/tests/yaml_samples/network5.yaml b/python/tests/yaml_samples/network5.yaml
similarity index 100%
rename from tests/yaml_samples/network5.yaml
rename to python/tests/yaml_samples/network5.yaml
diff --git a/tests/yaml_samples/networkLink.yaml b/python/tests/yaml_samples/networkLink.yaml
similarity index 100%
rename from tests/yaml_samples/networkLink.yaml
rename to python/tests/yaml_samples/networkLink.yaml
diff --git a/tests/yaml_samples/networkLink2.yaml b/python/tests/yaml_samples/networkLink2.yaml
similarity index 100%
rename from tests/yaml_samples/networkLink2.yaml
rename to python/tests/yaml_samples/networkLink2.yaml
diff --git a/tests/yaml_samples/networkLink3.yaml b/python/tests/yaml_samples/networkLink3.yaml
similarity index 100%
rename from tests/yaml_samples/networkLink3.yaml
rename to python/tests/yaml_samples/networkLink3.yaml
diff --git a/tests/yaml_samples/no_baremetal_node.yaml b/python/tests/yaml_samples/no_baremetal_node.yaml
similarity index 100%
rename from tests/yaml_samples/no_baremetal_node.yaml
rename to python/tests/yaml_samples/no_baremetal_node.yaml
diff --git a/tests/yaml_samples/no_duplicate_IPs_no_addressing.yaml b/python/tests/yaml_samples/no_duplicate_IPs_no_addressing.yaml
similarity index 100%
rename from tests/yaml_samples/no_duplicate_IPs_no_addressing.yaml
rename to python/tests/yaml_samples/no_duplicate_IPs_no_addressing.yaml
diff --git a/tests/yaml_samples/oob.yaml b/python/tests/yaml_samples/oob.yaml
similarity index 100%
rename from tests/yaml_samples/oob.yaml
rename to python/tests/yaml_samples/oob.yaml
diff --git a/tests/yaml_samples/rack.yaml b/python/tests/yaml_samples/rack.yaml
similarity index 100%
rename from tests/yaml_samples/rack.yaml
rename to python/tests/yaml_samples/rack.yaml
diff --git a/tests/yaml_samples/region.yaml b/python/tests/yaml_samples/region.yaml
similarity index 100%
rename from tests/yaml_samples/region.yaml
rename to python/tests/yaml_samples/region.yaml
diff --git a/tests/yaml_samples/singledoc.yaml b/python/tests/yaml_samples/singledoc.yaml
similarity index 100%
rename from tests/yaml_samples/singledoc.yaml
rename to python/tests/yaml_samples/singledoc.yaml
diff --git a/tests/yaml_samples/storage_partitioning_unassigned_partition.yaml b/python/tests/yaml_samples/storage_partitioning_unassigned_partition.yaml
similarity index 100%
rename from tests/yaml_samples/storage_partitioning_unassigned_partition.yaml
rename to python/tests/yaml_samples/storage_partitioning_unassigned_partition.yaml
diff --git a/tests/yaml_samples/storage_sizing.yaml b/python/tests/yaml_samples/storage_sizing.yaml
similarity index 100%
rename from tests/yaml_samples/storage_sizing.yaml
rename to python/tests/yaml_samples/storage_sizing.yaml
diff --git a/tests/yaml_samples/unknown_kind.yaml b/python/tests/yaml_samples/unknown_kind.yaml
similarity index 100%
rename from tests/yaml_samples/unknown_kind.yaml
rename to python/tests/yaml_samples/unknown_kind.yaml
diff --git a/tests/yaml_samples/validation.yaml b/python/tests/yaml_samples/validation.yaml
similarity index 100%
rename from tests/yaml_samples/validation.yaml
rename to python/tests/yaml_samples/validation.yaml
diff --git a/tools/drydock_image_build.sh b/tools/drydock_image_build.sh
index 067db8bc..cc54b976 100755
--- a/tools/drydock_image_build.sh
+++ b/tools/drydock_image_build.sh
@@ -24,6 +24,7 @@ fi
 
 docker build --network host -t ${IMAGE} --label ${LABEL} -f images/drydock/Dockerfile \
   ${ADDL_BUILD_ARGS} \
+  --build-arg BUILD_DIR=${BUILD_DIR} \
   --build-arg http_proxy=${http_proxy} \
   --build-arg https_proxy=${https_proxy} \
   --build-arg HTTP_PROXY=${HTTP_PROXY} \
diff --git a/tools/helm_install.sh b/tools/helm_install.sh
index 15f1cf9b..e5616558 100755
--- a/tools/helm_install.sh
+++ b/tools/helm_install.sh
@@ -17,7 +17,7 @@
 set -x
 
 HELM=$1
-HELM_ARTIFACT_URL=${HELM_ARTIFACT_URL:-"https://storage.googleapis.com/kubernetes-helm/helm-v2.7.2-linux-amd64.tar.gz"}
+HELM_ARTIFACT_URL=${HELM_ARTIFACT_URL:-"https://storage.googleapis.com/kubernetes-helm/helm-v2.10.0-linux-amd64.tar.gz"}
 
 
 function install_helm_binary {
@@ -31,9 +31,10 @@ function install_helm_binary {
   then
     TMP_DIR=${BUILD_DIR:-$(mktemp -d)}
     curl -o "${TMP_DIR}/helm.tar.gz" "${HELM_ARTIFACT_URL}"
-    cd ${TMP_DIR}
+    pushd ${TMP_DIR}
     tar -xvzf helm.tar.gz
-    cp "${TMP_DIR}/linux-amd64/helm" "${HELM}"
+    cp "linux-amd64/helm" "helm"
+    popd
   else
     echo "Cannot write to ${HELM}"
     exit -1
diff --git a/tools/helm_tk.sh b/tools/helm_tk.sh
index d24cf026..3af967a4 100755
--- a/tools/helm_tk.sh
+++ b/tools/helm_tk.sh
@@ -20,6 +20,7 @@ HTK_REPO=${HTK_REPO:-"https://github.com/openstack/openstack-helm"}
 HTK_PATH=${HTK_PATH:-""}
 HTK_STABLE_COMMIT=${HTK_COMMIT:-"f902cd14fac7de4c4c9f7d019191268a6b4e9601"}
 DEP_UP_LIST=${DEP_UP_LIST:-"drydock"}
+BUILD_DIR=${BUILD_DIR:-$(mktemp -d)}
 
 if [[ ! -z $(echo $http_proxy) ]]
 then
@@ -28,15 +29,18 @@ fi
 
 set -x
 
+# Use ./helm as we expect this to be run in a already
+# configured build directory
+
 function helm_serve {
   if [[ -d "$HOME/.helm" ]]; then
      echo ".helm directory found"
   else
-     ${HELM} init --client-only
+     "${HELM}" init --client-only
   fi
-  if [[ -z $(curl -s 127.0.0.1:8879 | grep 'Helm Repository') ]]; then
-     ${HELM} serve & > /dev/null
-     while [[ -z $(curl -s 127.0.0.1:8879 | grep 'Helm Repository') ]]; do
+  if [[ -z $(curl --noproxy '*' -s 127.0.0.1:8879 | grep 'Helm Repository') ]]; then
+     "${HELM}" serve & > /dev/null
+     while [[ -z $(curl --noproxy '*' -s 127.0.0.1:8879 | grep 'Helm Repository') ]]; do
         sleep 1
         echo "Waiting for Helm Repository"
      done
@@ -44,15 +48,15 @@ function helm_serve {
      echo "Helm serve already running"
   fi
 
-  if ${HELM} repo list | grep -q "^stable" ; then
-     ${HELM} repo remove stable
+  if "${HELM}" repo list | grep -q "^stable" ; then
+     "${HELM}" repo remove stable
   fi
 
   ${HELM} repo add local http://localhost:8879/charts
 }
 
-mkdir -p build
-pushd build
+mkdir -p "$BUILD_DIR"
+pushd "$BUILD_DIR"
 git clone $HTK_REPO || true
 pushd openstack-helm/$HTK_PATH
 git reset --hard "${HTK_STABLE_COMMIT}"
diff --git a/tox.ini b/tox.ini
index cc91c2ef..226e1024 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,13 +1,14 @@
 [tox]
 envlist = py35,pep8,bandit
+setupdir=python/
 
 [testenv]
-setenv = YAMLDIR = {toxinidir}/tests/yaml_samples/
+setenv = YAMLDIR = {toxinidir}/python/tests/yaml_samples/
 basepython=python3
 passenv = http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY
 deps=
-  -rrequirements-lock.txt
-  -rrequirements-test.txt
+  -rpython/requirements-lock.txt
+  -rpython/requirements-test.txt
 
 [testenv:venv]
 commands = {posargs}
@@ -18,53 +19,53 @@ whitelist_externals=
   rm
   sh
 deps=
-  -rrequirements-direct.txt
+  -rpython/requirements-direct.txt
 commands=
-  rm requirements-lock.txt
-  sh -c "pip freeze --all | grep -vE 'drydock-provisioner|pyinotify|pkg-resources==0.0.0' > requirements-lock.txt"
+  rm python/requirements-lock.txt
+  sh -c "pip freeze --all | grep -vE 'drydock-provisioner|pyinotify|pkg-resources==0.0.0' > python/requirements-lock.txt"
 
 [testenv:yapf]
 basepython=python3
 whitelist_externals=find
 commands=
-  yapf -i -r  --style=pep8 {toxinidir}/setup.py
+  yapf -i -r  --style=pep8 {toxinidir}/python/setup.py
   yapf -i -r  --style=pep8 {toxinidir}/alembic
-  yapf -i -r  --style=pep8 {toxinidir}/drydock_provisioner
-  yapf -i -r  --style=pep8 {toxinidir}/tests
-  find {toxinidir}/drydock_provisioner -name '__init__.py' -exec yapf -i --style=pep8 \{\} ;
+  yapf -i -r  --style=pep8 {toxinidir}/python/drydock_provisioner
+  yapf -i -r  --style=pep8 {toxinidir}/python/tests
+  find {toxinidir}/python/drydock_provisioner -name '__init__.py' -exec yapf -i --style=pep8 \{\} ;
 
 [testenv:py35]
 basepython=python3
 usedevelop=True
 setenv=
   PYTHONWARNING=all
-  YAMLDIR={toxinidir}/tests/yaml_samples/
+  YAMLDIR={toxinidir}/python/tests/yaml_samples/
 commands=
   py.test \
     --cov=drydock_provisioner \
-    {toxinidir}/tests/unit/{posargs}
+    {toxinidir}/python/tests/unit/{posargs}
 
 [testenv:integration]
 basepython=python3.5
 passenv=DOCKER_REGISTRY IMAGE_NAME IMAGE_PREFIX IMAGE_TAG
 setenv=
   PYTHONWARNING=all
-  YAMLDIR={toxinidir}/tests/yaml_samples/
+  YAMLDIR={toxinidir}/python/tests/yaml_samples/
 commands=
-  {toxinidir}/tests/postgres/start_postgres.sh
+  {toxinidir}/python/tests/postgres/start_postgres.sh
   py.test \
-    {toxinidir}/tests/integration/postgres/{posargs}
+    {toxinidir}/python/tests/integration/postgres/{posargs}
 
 [testenv:cover]
 basepython=python3
 usedevelop=True
 passenv=DOCKER_REGISTRY IMAGE_NAME IMAGE_PREFIX IMAGE_TAG
 setenv=
-  YAMLDIR={toxinidir}/tests/yaml_samples/
+  YAMLDIR={toxinidir}/python/tests/yaml_samples/
 commands=
-  {toxinidir}/tests/postgres/start_postgres.sh
+  {toxinidir}/python/tests/postgres/start_postgres.sh
   py.test --cov=drydock_provisioner \
-    {toxinidir}/tests/unit/ {toxinidir}/tests/integration/postgres
+    {toxinidir}/python/tests/unit/ {toxinidir}/python/tests/integration/postgres
 
 [testenv:genconfig]
 basepython=python3