diff --git a/spec/acceptance/nodesets/default.yml b/spec/acceptance/nodesets/default.yml
new file mode 100644
index 0000000..3bb3e62
--- /dev/null
+++ b/spec/acceptance/nodesets/default.yml
@@ -0,0 +1,11 @@
+HOSTS:
+  ubuntu-server-1404-x64:
+    roles:
+      - master
+    platform: ubuntu-14.04-amd64
+    box: puppetlabs/ubuntu-14.04-64-nocm
+    box_url: https://vagrantcloud.com/puppetlabs/ubuntu-14.04-64-nocm
+    hypervisor: vagrant
+CONFIG:
+  log_level: debug
+  type: git
diff --git a/spec/acceptance/nodesets/nodepool-centos7.yml b/spec/acceptance/nodesets/nodepool-centos7.yml
new file mode 100644
index 0000000..c552874
--- /dev/null
+++ b/spec/acceptance/nodesets/nodepool-centos7.yml
@@ -0,0 +1,10 @@
+HOSTS:
+  centos-70-x64:
+    roles:
+      - master
+    platform: el-7-x86_64
+    hypervisor: none
+    ip: 127.0.0.1
+CONFIG:
+  type: foss
+  set_env: false
diff --git a/spec/acceptance/nodesets/nodepool-trusty.yml b/spec/acceptance/nodesets/nodepool-trusty.yml
new file mode 100644
index 0000000..9fc624e
--- /dev/null
+++ b/spec/acceptance/nodesets/nodepool-trusty.yml
@@ -0,0 +1,10 @@
+HOSTS:
+  ubuntu-14.04-amd64:
+    roles:
+      - master
+    platform: ubuntu-14.04-amd64
+    hypervisor: none
+    ip: 127.0.0.1
+CONFIG:
+  type: foss
+  set_env: false
diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb
new file mode 100644
index 0000000..a3a42aa
--- /dev/null
+++ b/spec/spec_helper_acceptance.rb
@@ -0,0 +1,58 @@
+require 'beaker-rspec'
+
+hosts.each do |host|
+
+  install_puppet
+
+  on host, "mkdir -p #{host['distmoduledir']}"
+end
+
+RSpec.configure do |c|
+  # Project root
+  proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
+  modname = JSON.parse(open('metadata.json').read)['name'].split('-')[1]
+
+  # Readable test descriptions
+  c.formatter = :documentation
+
+  # Configure all nodes in nodeset
+  c.before :suite do
+    # Install module and dependencies
+    hosts.each do |host|
+
+      # Clean out any module cruft
+      shell('rm -fr /etc/puppet/modules/*')
+
+      # install git
+      install_package host, 'git'
+
+      zuul_ref = ENV['ZUUL_REF']
+      zuul_branch = ENV['ZUUL_BRANCH']
+      zuul_url = ENV['ZUUL_URL']
+
+      # Install dependent modules via git or zuul
+      r = on host, "test -e /usr/zuul-env/bin/zuul-cloner", { :acceptable_exit_codes => [0,1] }
+      repo = 'openstack-infra/system-config'
+      if r.exit_code == 0
+        zuul_clone_cmd = '/usr/zuul-env/bin/zuul-cloner '
+        zuul_clone_cmd += '--cache-dir /opt/git '
+        zuul_clone_cmd += "--zuul-ref #{zuul_ref} "
+        zuul_clone_cmd += "--zuul-branch #{zuul_branch} "
+        zuul_clone_cmd += "--zuul-url #{zuul_url} "
+        zuul_clone_cmd += "git://git.openstack.org #{repo}"
+        on host, zuul_clone_cmd
+      else
+        on host, "git clone https://git.openstack.org/#{repo}"
+      end
+
+      on host, "ZUUL_REF=#{zuul_ref} ZUUL_BRANCH=#{zuul_branch} ZUUL_URL=#{zuul_url} bash #{repo}/tools/install_modules_acceptance.sh"
+      on host, "rm -fr /etc/puppet/modules/#{modname}"
+
+      # Install the module being tested
+      puppet_module_install(:source => proj_root, :module_name => modname)
+      on host, "rm -fr #{repo}"
+      # List modules installed to help with debugging
+      on hosts[0], puppet('module','list'), { :acceptable_exit_codes => 0 }
+    end
+  end
+end