Provisioning now generates a DNA JSON file and uploads it to the /tmp directory for use. Fixed some issues with SCPing.
This commit is contained in:
parent
b0574aa95c
commit
8abb4e1d6e
|
@ -5,3 +5,4 @@ Hobofile
|
||||||
.hobo
|
.hobo
|
||||||
.bundle
|
.bundle
|
||||||
*.lock
|
*.lock
|
||||||
|
cookbooks/*
|
2
Gemfile
2
Gemfile
|
@ -4,7 +4,9 @@ source "http://gems.github.com"
|
||||||
# Gems required for the lib to even run
|
# Gems required for the lib to even run
|
||||||
gem "virtualbox", ">= 0.4.3"
|
gem "virtualbox", ">= 0.4.3"
|
||||||
gem "net-ssh", ">= 2.0.19"
|
gem "net-ssh", ">= 2.0.19"
|
||||||
|
gem "net-scp", ">= 1.0.2"
|
||||||
gem "jashmenn-git-style-binaries", ">= 0.1.10"
|
gem "jashmenn-git-style-binaries", ">= 0.1.10"
|
||||||
|
gem "json", ">= 1.2.0"
|
||||||
|
|
||||||
# Gems required for testing only. To install run
|
# Gems required for testing only. To install run
|
||||||
# gem bundle test
|
# gem bundle test
|
||||||
|
|
|
@ -15,4 +15,7 @@ Hobo::Config.run do |config|
|
||||||
|
|
||||||
config.chef.cookbooks_path = "cookbooks"
|
config.chef.cookbooks_path = "cookbooks"
|
||||||
config.chef.provisioning_path = "/tmp/hobo-chef"
|
config.chef.provisioning_path = "/tmp/hobo-chef"
|
||||||
|
config.chef.json = {
|
||||||
|
:recipes => ["hobo_main"]
|
||||||
|
}
|
||||||
end
|
end
|
|
@ -71,6 +71,7 @@ module Hobo
|
||||||
class ChefConfig < Base
|
class ChefConfig < Base
|
||||||
attr_accessor :cookbooks_path
|
attr_accessor :cookbooks_path
|
||||||
attr_accessor :provisioning_path
|
attr_accessor :provisioning_path
|
||||||
|
attr_accessor :json
|
||||||
end
|
end
|
||||||
|
|
||||||
class Top < Base
|
class Top < Base
|
||||||
|
|
|
@ -4,11 +4,28 @@ module Hobo
|
||||||
|
|
||||||
def initialize(vm)
|
def initialize(vm)
|
||||||
@vm = vm
|
@vm = vm
|
||||||
@vm.share_folder("hobo-provisioning", File.expand_path(Hobo.config.chef.cookbooks_path, Env.root_path), Hobo.config.chef.provisioning_path)
|
|
||||||
|
# Share the cookbook folder. We'll use the provisioning path exclusively for
|
||||||
|
# chef stuff.
|
||||||
|
cookbooks_path = File.join(Hobo.config.chef.provisioning_path, "cookbooks")
|
||||||
|
@vm.share_folder("hobo-provisioning", File.expand_path(Hobo.config.chef.cookbooks_path, Env.root_path), cookbooks_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
def run
|
def run
|
||||||
|
chown_provisioning_folder
|
||||||
|
setup_json
|
||||||
|
end
|
||||||
|
|
||||||
|
def chown_provisioning_folder
|
||||||
|
logger.info "Setting permissions on deployment folder..."
|
||||||
|
SSH.execute do |ssh|
|
||||||
|
ssh.exec!("sudo chown #{Hobo.config.ssh.username} #{Hobo.config.chef.provisioning_path}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def setup_json
|
||||||
|
logger.info "Generating JSON and uploading..."
|
||||||
|
SSH.upload!(StringIO.new(Hobo.config.chef.json.to_json), File.join(Hobo.config.chef.provisioning_path, "dna.json"))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -23,9 +23,10 @@ module Hobo
|
||||||
end
|
end
|
||||||
|
|
||||||
def upload!(from, to)
|
def upload!(from, to)
|
||||||
Net::SCP.upload!(Hobo.config.ssh.host, Hobo.config.ssh.username,
|
execute do |ssh|
|
||||||
from, to,
|
scp = Net::SCP.new(ssh)
|
||||||
:password => Hobo.config.ssh.password)
|
scp.upload!(from, to)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def up?
|
def up?
|
||||||
|
|
|
@ -162,6 +162,7 @@ error
|
||||||
logger.info "-- #{name}: #{guestpath}"
|
logger.info "-- #{name}: #{guestpath}"
|
||||||
ssh.exec!("sudo mkdir -p #{guestpath}")
|
ssh.exec!("sudo mkdir -p #{guestpath}")
|
||||||
ssh.exec!("sudo mount -t vboxsf #{name} #{guestpath}")
|
ssh.exec!("sudo mount -t vboxsf #{name} #{guestpath}")
|
||||||
|
ssh.exec!("sudo chown #{Hobo.config.ssh.username} #{guestpath}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,12 +1,46 @@
|
||||||
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
||||||
|
|
||||||
class ProvisioningTest < Test::Unit::TestCase
|
class ProvisioningTest < Test::Unit::TestCase
|
||||||
|
setup do
|
||||||
|
# Stub upload so nothing happens
|
||||||
|
Hobo::SSH.stubs(:upload!)
|
||||||
|
|
||||||
|
vm = mock("vm")
|
||||||
|
vm.stubs(:share_folder)
|
||||||
|
@prov = Hobo::Provisioning.new(vm)
|
||||||
|
end
|
||||||
|
|
||||||
context "initializing" do
|
context "initializing" do
|
||||||
should "setup shared folder on VM" do
|
should "setup shared folder on VM for the cookbooks" do
|
||||||
File.expects(:expand_path).with(Hobo.config.chef.cookbooks_path, Hobo::Env.root_path).returns("foo")
|
File.expects(:expand_path).with(Hobo.config.chef.cookbooks_path, Hobo::Env.root_path).returns("foo")
|
||||||
|
cookbooks_path = File.join(Hobo.config.chef.provisioning_path, "cookbooks")
|
||||||
vm = mock("vm")
|
vm = mock("vm")
|
||||||
vm.expects(:share_folder).with("hobo-provisioning", "foo", Hobo.config.chef.provisioning_path)
|
vm.expects(:share_folder).with("hobo-provisioning", "foo", cookbooks_path)
|
||||||
Hobo::Provisioning.new(vm)
|
Hobo::Provisioning.new(vm)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "permissions on provisioning folder" do
|
||||||
|
should "chown the folder to the ssh user" do
|
||||||
|
ssh = mock("ssh")
|
||||||
|
ssh.expects(:exec!).with("sudo chown #{Hobo.config.ssh.username} #{Hobo.config.chef.provisioning_path}")
|
||||||
|
Hobo::SSH.expects(:execute).yields(ssh)
|
||||||
|
@prov.chown_provisioning_folder
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "generating and uploading json" do
|
||||||
|
should "convert the JSON config to JSON" do
|
||||||
|
Hobo.config.chef.json.expects(:to_json).once.returns("foo")
|
||||||
|
@prov.setup_json
|
||||||
|
end
|
||||||
|
|
||||||
|
should "upload a StringIO to dna.json" do
|
||||||
|
Hobo.config.chef.json.expects(:to_json).once.returns("foo")
|
||||||
|
StringIO.expects(:new).with("foo").returns("bar")
|
||||||
|
File.expects(:join).with(Hobo.config.chef.provisioning_path, "dna.json").once.returns("baz")
|
||||||
|
Hobo::SSH.expects(:upload!).with("bar", "baz").once
|
||||||
|
@prov.setup_json
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -38,8 +38,12 @@ class SshTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
context "SCPing files to the remote host" do
|
context "SCPing files to the remote host" do
|
||||||
should "use the SSH information to SCP files" do
|
should "use Hobo::SSH execute to setup an SCP connection and upload" do
|
||||||
Net::SCP.expects(:upload!).with(Hobo.config.ssh.host, Hobo.config.ssh.username, "foo", "bar", :password => Hobo.config.ssh.password)
|
scp = mock("scp")
|
||||||
|
ssh = mock("ssh")
|
||||||
|
scp.expects(:upload!).with("foo", "bar").once
|
||||||
|
Net::SCP.expects(:new).with(ssh).returns(scp).once
|
||||||
|
Hobo::SSH.expects(:execute).yields(ssh).once
|
||||||
Hobo::SSH.upload!("foo", "bar")
|
Hobo::SSH.upload!("foo", "bar")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -260,6 +260,7 @@ class VMTest < Test::Unit::TestCase
|
||||||
@vm.shared_folders.each do |name, hostpath, guestpath|
|
@vm.shared_folders.each do |name, hostpath, guestpath|
|
||||||
ssh.expects(:exec!).with("sudo mkdir -p #{guestpath}").in_sequence(mount_seq)
|
ssh.expects(:exec!).with("sudo mkdir -p #{guestpath}").in_sequence(mount_seq)
|
||||||
ssh.expects(:exec!).with("sudo mount -t vboxsf #{name} #{guestpath}").in_sequence(mount_seq)
|
ssh.expects(:exec!).with("sudo mount -t vboxsf #{name} #{guestpath}").in_sequence(mount_seq)
|
||||||
|
ssh.expects(:exec!).with("sudo chown #{Hobo.config.ssh.username} #{guestpath}").in_sequence(mount_seq)
|
||||||
end
|
end
|
||||||
Hobo::SSH.expects(:execute).yields(ssh)
|
Hobo::SSH.expects(:execute).yields(ssh)
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,9 @@ class Test::Unit::TestCase
|
||||||
|
|
||||||
config.chef.cookbooks_path = "cookbooks"
|
config.chef.cookbooks_path = "cookbooks"
|
||||||
config.chef.provisioning_path = "/tmp/hobo-chef"
|
config.chef.provisioning_path = "/tmp/hobo-chef"
|
||||||
|
config.chef.json = {
|
||||||
|
:recipes => ["hobo_main"]
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
Hobo::Config.execute!
|
Hobo::Config.execute!
|
||||||
|
|
Loading…
Reference in New Issue