Merge pull request #9034 from briancain/unify-solaris-guests
Unify Solaris Guests
This commit is contained in:
commit
47edb88fe4
|
@ -11,8 +11,6 @@ module VagrantPlugins
|
||||||
|
|
||||||
# Only do this if the hostname is not already set
|
# Only do this if the hostname is not already set
|
||||||
if !machine.communicate.test("/usr/sbin/svccfg -s system/identity:node listprop config/nodename | /usr/bin/grep '#{name}'")
|
if !machine.communicate.test("/usr/sbin/svccfg -s system/identity:node listprop config/nodename | /usr/bin/grep '#{name}'")
|
||||||
#machine.communicate.execute("#{su_cmd} sh -c \"echo '#{name}' > /etc/nodename\"")
|
|
||||||
#machine.communicate.execute("#{su_cmd} uname -S #{name}")
|
|
||||||
machine.communicate.execute("#{su_cmd} /usr/sbin/svccfg -s system/identity:node setprop config/nodename=\"#{name}\"")
|
machine.communicate.execute("#{su_cmd} /usr/sbin/svccfg -s system/identity:node setprop config/nodename=\"#{name}\"")
|
||||||
machine.communicate.execute("#{su_cmd} /usr/sbin/svccfg -s system/identity:node setprop config/loopback=\"#{name}\"")
|
machine.communicate.execute("#{su_cmd} /usr/sbin/svccfg -s system/identity:node setprop config/loopback=\"#{name}\"")
|
||||||
machine.communicate.execute("#{su_cmd} /usr/sbin/svccfg -s system/identity:node refresh ")
|
machine.communicate.execute("#{su_cmd} /usr/sbin/svccfg -s system/identity:node refresh ")
|
||||||
|
|
|
@ -12,19 +12,13 @@ module VagrantPlugins
|
||||||
su_cmd = machine.config.solaris11.suexec_cmd
|
su_cmd = machine.config.solaris11.suexec_cmd
|
||||||
mask = "#{network[:netmask]}"
|
mask = "#{network[:netmask]}"
|
||||||
cidr = mask.split(".").map { |e| e.to_i.to_s(2).rjust(8, "0") }.join.count("1").to_s
|
cidr = mask.split(".").map { |e| e.to_i.to_s(2).rjust(8, "0") }.join.count("1").to_s
|
||||||
#ifconfig_cmd = "#{su_cmd} /sbin/ifconfig #{device}"
|
|
||||||
#machine.communicate.execute("#{ifconfig_cmd} plumb")
|
|
||||||
if network[:type].to_sym == :static
|
if network[:type].to_sym == :static
|
||||||
#machine.communicate.execute("#{ifconfig_cmd} inet #{network[:ip]} netmask #{network[:netmask]}")
|
|
||||||
#machine.communicate.execute("#{ifconfig_cmd} up")
|
|
||||||
#machine.communicate.execute("#{su_cmd} sh -c \"echo '#{network[:ip]}' > /etc/hostname.#{device}\"")
|
|
||||||
# ipadm create-addr -T static -a local=172.16.10.15/24 net2/v4
|
|
||||||
if machine.communicate.test("ipadm | grep #{device}/v4")
|
if machine.communicate.test("ipadm | grep #{device}/v4")
|
||||||
machine.communicate.execute("#{su_cmd} ipadm delete-addr #{device}/v4")
|
machine.communicate.execute("#{su_cmd} ipadm delete-addr #{device}/v4")
|
||||||
end
|
end
|
||||||
machine.communicate.execute("#{su_cmd} ipadm create-addr -T static -a #{network[:ip]}/#{cidr} #{device}/v4")
|
machine.communicate.execute("#{su_cmd} ipadm create-addr -T static -a #{network[:ip]}/#{cidr} #{device}/v4")
|
||||||
elsif network[:type].to_sym == :dhcp
|
elsif network[:type].to_sym == :dhcp
|
||||||
#machine.communicate.execute("#{ifconfig_cmd} dhcp start")
|
|
||||||
if machine.communicate.test("ipadm show-if -o all | grep #{device} | tr -s ' ' | cut -d ' ' -f 6 | grep '4\|6'")
|
if machine.communicate.test("ipadm show-if -o all | grep #{device} | tr -s ' ' | cut -d ' ' -f 6 | grep '4\|6'")
|
||||||
machine.communicate.execute("#{su_cmd} ipadm create-addr -T addrconf #{device}/v4")
|
machine.communicate.execute("#{su_cmd} ipadm create-addr -T addrconf #{device}/v4")
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
# A general Vagrant system implementation for "solaris 11".
|
|
||||||
#
|
|
||||||
# Contributed by Jan Thomas Moldung <janth@moldung.no>
|
|
||||||
|
|
||||||
module VagrantPlugins
|
|
||||||
module GuestSolaris11
|
|
||||||
module Cap
|
|
||||||
class Halt
|
|
||||||
def self.halt(machine)
|
|
||||||
# There should be an exception raised if the line
|
|
||||||
#
|
|
||||||
# vagrant::::profiles=Primary Administrator
|
|
||||||
#
|
|
||||||
# does not exist in /etc/user_attr. TODO
|
|
||||||
begin
|
|
||||||
machine.communicate.execute(
|
|
||||||
"#{machine.config.solaris11.suexec_cmd} /usr/sbin/shutdown -y -i5 -g0")
|
|
||||||
rescue IOError, Vagrant::Errors::SSHDisconnected
|
|
||||||
# Ignore, this probably means connection closed because it
|
|
||||||
# shut down.
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,21 +0,0 @@
|
||||||
require "vagrant/util/shell_quote"
|
|
||||||
|
|
||||||
module VagrantPlugins
|
|
||||||
module GuestSolaris11
|
|
||||||
module Cap
|
|
||||||
class InsertPublicKey
|
|
||||||
def self.insert_public_key(machine, contents)
|
|
||||||
contents = contents.chomp
|
|
||||||
contents = Vagrant::Util::ShellQuote.escape(contents, "'")
|
|
||||||
|
|
||||||
machine.communicate.tap do |comm|
|
|
||||||
comm.execute("mkdir -p ~/.ssh")
|
|
||||||
comm.execute("chmod 0700 ~/.ssh")
|
|
||||||
comm.execute("printf '#{contents}\\n' >> ~/.ssh/authorized_keys")
|
|
||||||
comm.execute("chmod 0600 ~/.ssh/authorized_keys")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,45 +0,0 @@
|
||||||
# A general Vagrant system implementation for "solaris 11".
|
|
||||||
#
|
|
||||||
# Contributed by Jan Thomas Moldung <janth@moldung.no>
|
|
||||||
|
|
||||||
module VagrantPlugins
|
|
||||||
module GuestSolaris11
|
|
||||||
module Cap
|
|
||||||
class MountVirtualBoxSharedFolder
|
|
||||||
def self.mount_virtualbox_shared_folder(machine, name, guestpath, options)
|
|
||||||
# These are just far easier to use than the full options syntax
|
|
||||||
owner = options[:owner]
|
|
||||||
group = options[:group]
|
|
||||||
|
|
||||||
# Create the shared folder
|
|
||||||
machine.communicate.execute("#{machine.config.solaris11.suexec_cmd} mkdir -p #{guestpath}")
|
|
||||||
|
|
||||||
if owner.is_a? Integer
|
|
||||||
mount_uid = owner
|
|
||||||
else
|
|
||||||
# We have to use this `id` command instead of `/usr/bin/id` since this
|
|
||||||
# one accepts the "-u" and "-g" flags.
|
|
||||||
mount_uid = "`/usr/xpg4/bin/id -u #{owner}`"
|
|
||||||
end
|
|
||||||
|
|
||||||
if group.is_a? Integer
|
|
||||||
mount_gid = group
|
|
||||||
else
|
|
||||||
mount_gid = "`/usr/xpg4/bin/id -g #{group}`"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Mount the folder with the proper owner/group
|
|
||||||
mount_options = "-o uid=#{mount_uid},gid=#{mount_gid}"
|
|
||||||
if options[:mount_options]
|
|
||||||
mount_options += ",#{options[:mount_options].join(",")}"
|
|
||||||
end
|
|
||||||
|
|
||||||
machine.communicate.execute("#{machine.config.solaris11.suexec_cmd} /sbin/mount -F vboxfs #{mount_options} #{name} #{guestpath}")
|
|
||||||
|
|
||||||
# chown the folder to the proper owner/group
|
|
||||||
machine.communicate.execute("#{machine.config.solaris11.suexec_cmd} chown #{mount_uid}:#{mount_gid} #{guestpath}")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,21 +0,0 @@
|
||||||
require "vagrant/util/shell_quote"
|
|
||||||
|
|
||||||
module VagrantPlugins
|
|
||||||
module GuestSolaris11
|
|
||||||
module Cap
|
|
||||||
class RemovePublicKey
|
|
||||||
def self.remove_public_key(machine, contents)
|
|
||||||
contents = contents.chomp
|
|
||||||
contents = Vagrant::Util::ShellQuote.escape(contents, "'")
|
|
||||||
|
|
||||||
machine.communicate.tap do |comm|
|
|
||||||
if comm.test("test -f ~/.ssh/authorized_keys")
|
|
||||||
comm.execute(
|
|
||||||
"sed -i '/^.*#{contents}.*$/d' ~/.ssh/authorized_keys")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,29 +0,0 @@
|
||||||
require_relative "../../../synced_folders/rsync/default_unix_cap"
|
|
||||||
|
|
||||||
module VagrantPlugins
|
|
||||||
module GuestSolaris11
|
|
||||||
module Cap
|
|
||||||
class RSync
|
|
||||||
extend VagrantPlugins::SyncedFolderRSync::DefaultUnixCap
|
|
||||||
|
|
||||||
def self.rsync_command(machine)
|
|
||||||
"#{machine.config.solaris11.suexec_cmd} rsync"
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.rsync_pre(machine, opts)
|
|
||||||
machine.communicate.tap do |comm|
|
|
||||||
comm.sudo("mkdir -p '#{opts[:guestpath]}'")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.rsync_post(machine, opts)
|
|
||||||
if opts.key?(:chown) && !opts[:chown]
|
|
||||||
return
|
|
||||||
end
|
|
||||||
suexec_cmd = machine.config.solaris11.suexec_cmd
|
|
||||||
machine.communicate.execute("#{suexec_cmd} #{build_rsync_chown(opts)}")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -10,16 +10,16 @@ module VagrantPlugins
|
||||||
name "Solaris 11 guest."
|
name "Solaris 11 guest."
|
||||||
description "Solaris 11 guest support."
|
description "Solaris 11 guest support."
|
||||||
|
|
||||||
|
guest(:solaris11, :solaris) do
|
||||||
|
require_relative "guest"
|
||||||
|
Guest
|
||||||
|
end
|
||||||
|
|
||||||
config(:solaris11) do
|
config(:solaris11) do
|
||||||
require_relative "config"
|
require_relative "config"
|
||||||
Config
|
Config
|
||||||
end
|
end
|
||||||
|
|
||||||
guest(:solaris11) do
|
|
||||||
require_relative "guest"
|
|
||||||
Guest
|
|
||||||
end
|
|
||||||
|
|
||||||
guest_capability(:solaris11, :change_host_name) do
|
guest_capability(:solaris11, :change_host_name) do
|
||||||
require_relative "cap/change_host_name"
|
require_relative "cap/change_host_name"
|
||||||
Cap::ChangeHostName
|
Cap::ChangeHostName
|
||||||
|
@ -29,36 +29,6 @@ module VagrantPlugins
|
||||||
require_relative "cap/configure_networks"
|
require_relative "cap/configure_networks"
|
||||||
Cap::ConfigureNetworks
|
Cap::ConfigureNetworks
|
||||||
end
|
end
|
||||||
|
|
||||||
guest_capability(:solaris11, :halt) do
|
|
||||||
require_relative "cap/halt"
|
|
||||||
Cap::Halt
|
|
||||||
end
|
|
||||||
|
|
||||||
guest_capability(:solaris11, :mount_virtualbox_shared_folder) do
|
|
||||||
require_relative "cap/mount_virtualbox_shared_folder"
|
|
||||||
Cap::MountVirtualBoxSharedFolder
|
|
||||||
end
|
|
||||||
|
|
||||||
guest_capability(:solaris11, :rsync_installed) do
|
|
||||||
require_relative "cap/rsync"
|
|
||||||
Cap::RSync
|
|
||||||
end
|
|
||||||
|
|
||||||
guest_capability(:solaris11, :rsync_pre) do
|
|
||||||
require_relative "cap/rsync"
|
|
||||||
Cap::RSync
|
|
||||||
end
|
|
||||||
|
|
||||||
guest_capability(:solaris11, :insert_public_key) do
|
|
||||||
require_relative "cap/insert_public_key"
|
|
||||||
Cap::InsertPublicKey
|
|
||||||
end
|
|
||||||
|
|
||||||
guest_capability(:solaris11, :remove_public_key) do
|
|
||||||
require_relative "cap/remove_public_key"
|
|
||||||
Cap::RemovePublicKey
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
require_relative "../../../../base"
|
||||||
|
|
||||||
|
describe "VagrantPlugins::GuestSolaris11::Cap::ChangeHostName" do
|
||||||
|
let(:caps) do
|
||||||
|
VagrantPlugins::GuestSolaris11::Plugin
|
||||||
|
.components
|
||||||
|
.guest_capabilities[:solaris11]
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:machine) { double("machine", config: double("config", solaris11: double("solaris11", suexec_cmd: 'sudo'))) }
|
||||||
|
let(:comm) { VagrantTests::DummyCommunicator::Communicator.new(machine) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(machine).to receive(:communicate).and_return(comm)
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
comm.verify_expectations!
|
||||||
|
end
|
||||||
|
|
||||||
|
describe ".change_host_name" do
|
||||||
|
let(:cap) { caps.get(:change_host_name) }
|
||||||
|
let(:name) { "solaris11.domain.com" }
|
||||||
|
|
||||||
|
it "changes the hostname" do
|
||||||
|
allow(machine.communicate).to receive(:test).and_return(false)
|
||||||
|
allow(machine.communicate).to receive(:execute)
|
||||||
|
|
||||||
|
expect(machine.communicate).to receive(:execute).with("sudo /usr/sbin/svccfg -s system/identity:node setprop config/nodename=\"#{name}\"")
|
||||||
|
expect(machine.communicate).to receive(:execute).with("sudo /usr/sbin/svccfg -s system/identity:node setprop config/loopback=\"#{name}\"")
|
||||||
|
expect(machine.communicate).to receive(:execute).with("sudo /usr/sbin/svccfg -s system/identity:node refresh ")
|
||||||
|
expect(machine.communicate).to receive(:execute).with("sudo /usr/sbin/svcadm restart system/identity:node ")
|
||||||
|
cap.change_host_name(machine, name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,56 @@
|
||||||
|
require_relative "../../../../base"
|
||||||
|
|
||||||
|
describe "VagrantPlugins::GuestSolaris11::Cap::ConfigureNetworks" do
|
||||||
|
let(:caps) do
|
||||||
|
VagrantPlugins::GuestSolaris11::Plugin
|
||||||
|
.components
|
||||||
|
.guest_capabilities[:solaris11]
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:machine) { double("machine", config: double("config", solaris11: double("solaris11", suexec_cmd: 'sudo', device: 'net'))) }
|
||||||
|
let(:comm) { VagrantTests::DummyCommunicator::Communicator.new(machine) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(machine).to receive(:communicate).and_return(comm)
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
comm.verify_expectations!
|
||||||
|
end
|
||||||
|
|
||||||
|
describe ".configufre_networks" do
|
||||||
|
let(:cap) { caps.get(:configure_networks) }
|
||||||
|
let(:network_1) do
|
||||||
|
{
|
||||||
|
interface: 0,
|
||||||
|
type: "dhcp",
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:network_2) do
|
||||||
|
{
|
||||||
|
interface: 1,
|
||||||
|
type: "static",
|
||||||
|
ip: "33.33.33.10",
|
||||||
|
netmask: "255.255.0.0",
|
||||||
|
gateway: "33.33.0.1",
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:networks) { [network_1, network_2] }
|
||||||
|
|
||||||
|
it "configures the guests network if static" do
|
||||||
|
allow(machine.communicate).to receive(:test).and_return(true)
|
||||||
|
|
||||||
|
cap.configure_networks(machine, networks)
|
||||||
|
expect(comm.received_commands[1]).to eq("sudo ipadm delete-addr net1/v4")
|
||||||
|
expect(comm.received_commands[2]).to eq("sudo ipadm create-addr -T static -a 33.33.33.10/16 net1/v4")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "configures the guests network if dhcp" do
|
||||||
|
allow(machine.communicate).to receive(:test).and_return(true)
|
||||||
|
cap.configure_networks(machine, networks)
|
||||||
|
expect(comm.received_commands[0]).to eq("sudo ipadm create-addr -T addrconf net0/v4")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,44 +0,0 @@
|
||||||
require_relative "../../../../base"
|
|
||||||
|
|
||||||
describe "VagrantPlugins::GuestSolaris11::Cap::Halt" do
|
|
||||||
let(:caps) do
|
|
||||||
VagrantPlugins::GuestSolaris11::Plugin
|
|
||||||
.components
|
|
||||||
.guest_capabilities[:solaris11]
|
|
||||||
end
|
|
||||||
|
|
||||||
let(:shutdown_command){ "sudo /usr/sbin/shutdown -y -i5 -g0" }
|
|
||||||
let(:machine) { double("machine", config: double("config", solaris11: double("solaris11", suexec_cmd: 'sudo'))) }
|
|
||||||
let(:comm) { VagrantTests::DummyCommunicator::Communicator.new(machine) }
|
|
||||||
|
|
||||||
before do
|
|
||||||
allow(machine).to receive(:communicate).and_return(comm)
|
|
||||||
end
|
|
||||||
|
|
||||||
after do
|
|
||||||
comm.verify_expectations!
|
|
||||||
end
|
|
||||||
|
|
||||||
describe ".halt" do
|
|
||||||
let(:cap) { caps.get(:halt) }
|
|
||||||
|
|
||||||
it "runs the shutdown command" do
|
|
||||||
comm.expect_command(shutdown_command)
|
|
||||||
cap.halt(machine)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "ignores an IOError" do
|
|
||||||
comm.stub_command(shutdown_command, raise: IOError)
|
|
||||||
expect {
|
|
||||||
cap.halt(machine)
|
|
||||||
}.to_not raise_error
|
|
||||||
end
|
|
||||||
|
|
||||||
it "ignores a Vagrant::Errors::SSHDisconnected" do
|
|
||||||
comm.stub_command(shutdown_command, raise: Vagrant::Errors::SSHDisconnected)
|
|
||||||
expect {
|
|
||||||
cap.halt(machine)
|
|
||||||
}.to_not raise_error
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in New Issue