Repo
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1bfce6e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+tests/build/
+*.swp
+*.pyc
+.ropeproject
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..fc83783
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,26 @@
+DESTDIR=/
+SALTENVDIR=/usr/share/salt-formulas/env
+RECLASSDIR=/usr/share/salt-formulas/reclass
+FORMULANAME=$(shell grep name: metadata.yml|head -1|cut -d : -f 2|grep -Eo '[a-z0-9\-]*')
+
+all:
+	@echo "make install - Install into DESTDIR"
+	@echo "make test    - Run tests"
+	@echo "make clean   - Cleanup after tests run"
+
+install:
+	# Formula
+	[ -d $(DESTDIR)/$(SALTENVDIR) ] || mkdir -p $(DESTDIR)/$(SALTENVDIR)
+	cp -a $(FORMULANAME) $(DESTDIR)/$(SALTENVDIR)/
+	[ ! -d _modules ] || cp -a _modules $(DESTDIR)/$(SALTENVDIR)/
+	[ ! -d _states ] || cp -a _states $(DESTDIR)/$(SALTENVDIR)/ || true
+	# Metadata
+	[ -d $(DESTDIR)/$(RECLASSDIR)/service/$(FORMULANAME) ] || mkdir -p $(DESTDIR)/$(RECLASSDIR)/service/$(FORMULANAME)
+	cp -a metadata/service/* $(DESTDIR)/$(RECLASSDIR)/service/$(FORMULANAME)
+
+test:
+	[ ! -d tests ] || (cd tests; ./run_tests.sh)
+
+clean:
+	[ ! -d tests/build ] || rm -rf tests/build
+	[ ! -d build ] || rm -rf build
diff --git a/metadata.yml b/metadata.yml
new file mode 100644
index 0000000..515eb02
--- /dev/null
+++ b/metadata.yml
@@ -0,0 +1,3 @@
+name: "docker"
+version: "0.2"
+source: "https://github.com/tcpcloud/salt-formula-docker"
diff --git a/metadata/service/host/vendor_repo_ubuntu_trusty.yml b/metadata/service/host/vendor_repo_ubuntu_trusty.yml
new file mode 100644
index 0000000..cbb4bea
--- /dev/null
+++ b/metadata/service/host/vendor_repo_ubuntu_trusty.yml
@@ -0,0 +1,9 @@
+parameters:
+  linux:
+    system:
+      repo:
+        docker:
+          enabled: true
+          source: 'deb https://apt.dockerproject.org/repo ubuntu-trusty main'
+          key_id: 58118E89F3A912897C070ADBF76221572C52609D
+          key_server: hkp://p80.pool.sks-keyservers.net:80
\ No newline at end of file
diff --git a/tests/pillar/compute_cluster.sls b/tests/pillar/compute_cluster.sls
deleted file mode 100644
index 6f03b6e..0000000
--- a/tests/pillar/compute_cluster.sls
+++ /dev/null
@@ -1,49 +0,0 @@
-nova:
-  compute:
-    version: liberty
-    enabled: true
-    virtualization: kvm
-    heal_instance_info_cache_interval: 60
-    vncproxy_url: openstack:6080
-    bind:
-      vnc_address: 127.0.0.1
-      vnc_port: 6080
-      vnc_name: 0.0.0.0
-    database:
-      engine: mysql
-      host: 127.0.0.1
-      port: 3306
-      name: nova
-      user: nova
-      password: password
-    identity:
-      engine: keystone
-      host: 127.0.0.1
-      port: 35357
-      user: nova
-      password: password
-      tenant: service
-    message_queue:
-      engine: rabbitmq
-      host: 127.0.0.1
-      port: 5672
-      user: openstack
-      password: password
-      virtual_host: '/openstack'
-    image:
-      engine: glance
-      host: 127.0.0.1
-      port: 9292
-    network:
-      engine: neutron
-      host: 127.0.0.1
-      port: 9696
-    cache:
-      engine: memcached
-      members:
-      - host: 127.0.0.1
-        port: 11211
-      - host: 127.0.1.1
-        port: 11211
-      - host: 127.0.2.1
-        port: 11211
diff --git a/tests/pillar/compute_single.sls b/tests/pillar/compute_single.sls
deleted file mode 100644
index 036a140..0000000
--- a/tests/pillar/compute_single.sls
+++ /dev/null
@@ -1,45 +0,0 @@
-nova:
-  compute:
-    version: liberty
-    enabled: true
-    virtualization: kvm
-    heal_instance_info_cache_interval: 60
-    vncproxy_url: openstack:6080
-    bind:
-      vnc_address: 127.0.0.1
-      vnc_port: 6080
-      vnc_name: 0.0.0.0
-    database:
-      engine: mysql
-      host: 127.0.0.1
-      port: 3306
-      name: nova
-      user: nova
-      password: password
-    identity:
-      engine: keystone
-      host: 127.0.0.1
-      port: 35357
-      user: nova
-      password: password
-      tenant: service
-    message_queue:
-      engine: rabbitmq
-      host: 127.0.0.1
-      port: 5672
-      user: openstack
-      password: password
-      virtual_host: '/openstack'
-    image:
-      engine: glance
-      host: 127.0.0.1
-      port: 9292
-    network:
-      engine: neutron
-      host: 127.0.0.1
-      port: 9696
-    cache:
-      engine: memcached
-      members:
-      - host: 127.0.0.1
-        port: 11211
diff --git a/tests/pillar/control_cluster.sls b/tests/pillar/control_cluster.sls
deleted file mode 100644
index 158f565..0000000
--- a/tests/pillar/control_cluster.sls
+++ /dev/null
@@ -1,48 +0,0 @@
-nova:
-  controller:
-    enabled: true
-    networking: default
-    version: liberty
-    vncproxy_url: 127.0.0.1
-    security_group: false
-    dhcp_domain: novalocal
-    scheduler_default_filters: "DifferentHostFilter,RetryFilter,AvailabilityZoneFilter,RamFilter,CoreFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter"
-    cpu_allocation_ratio: 16.0
-    ram_allocation_ratio: 1.5
-    bind:
-      private_address: 127.0.0.1
-      public_address: 127.0.0.1
-      public_name: 127.0.0.1
-      novncproxy_port: 6080
-    database:
-      engine: mysql
-      host: 127.0.0.1
-      port: 3306
-      name: nova
-      user: nova
-      password: password
-    identity:
-      engine: keystone
-      host: 127.0.0.1
-      port: 35357
-      user: nova
-      password: password
-      tenant: service
-    message_queue:
-      engine: rabbitmq
-      host: 127.0.0.1
-      port: 5672
-      user: openstack
-      password: password
-      virtual_host: '/openstack'
-      ha_queues: true
-    glance:
-      host: 
-      port: 9292
-    network:
-      engine: neutron
-      host: 127.0.0.1
-      port: 9696
-      mtu: 1500
-    metadata:
-      password: metadata
diff --git a/tests/pillar/control_single.sls b/tests/pillar/control_single.sls
deleted file mode 100644
index 68c77b2..0000000
--- a/tests/pillar/control_single.sls
+++ /dev/null
@@ -1,52 +0,0 @@
-nova:
-  controller:
-    enabled: true
-    networking: contrail
-    version: liberty
-    security_group: false
-    vncproxy_url: 127.0.0.1
-    dhcp_domain: novalocal
-    scheduler_default_filters: "DifferentHostFilter,RetryFilter,AvailabilityZoneFilter,RamFilter,CoreFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter"
-    cpu_allocation_ratio: 16.0
-    ram_allocation_ratio: 1.5
-    bind:
-      private_address: 127.0.0.1
-      public_address: 127.0.0.1
-      public_name: 127.0.0.1
-      novncproxy_port: 6080
-    database:
-      engine: mysql
-      host: localhost
-      port: 3306
-      name: nova
-      user: nova
-      password: password
-    identity:
-      engine: keystone
-      host: 127.0.0.1
-      port: 35357
-      user: nova
-      password: password
-      tenant: service
-    message_queue:
-      engine: rabbitmq
-      host: 127.0.0.1
-      port: 5672
-      user: openstack
-      password: password
-      virtual_host: '/openstack'
-    glance:
-      host: 127.0.0.1
-      port: 9292
-    network:
-      engine: neutron
-      host: 127.0.0.1
-      port: 9696
-      mtu: 1500
-    metadata:
-      password: password
-    cache:
-      engine: memcached
-      members:
-      - host: 127.0.0.1
-        port: 11211
diff --git a/tests/pillar/host_single.yml b/tests/pillar/host_single.yml
new file mode 100644
index 0000000..d881df3
--- /dev/null
+++ b/tests/pillar/host_single.yml
@@ -0,0 +1,3 @@
+docker:
+  host:
+    enabled: true
diff --git a/tests/pillar/single.yml b/tests/pillar/single.yml
deleted file mode 100644
index 44ebafc..0000000
--- a/tests/pillar/single.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-docker:
-  server:
-    enabled: true
-    bind:
-      address: 0.0.0.0