diff --git a/plugins/provisioners/chef/cap/windows/chef_install.rb b/plugins/provisioners/chef/cap/windows/chef_install.rb new file mode 100644 index 000000000..f1f2317a6 --- /dev/null +++ b/plugins/provisioners/chef/cap/windows/chef_install.rb @@ -0,0 +1,16 @@ +require_relative "../../omnibus" + +module VagrantPlugins + module Chef + module Cap + module Windows + module ChefInstall + def self.chef_install(machine, project, version, channel, options = {}) + command = Omnibus.ps_command(project, version, channel, options) + machine.communicate.sudo(command) + end + end + end + end + end +end diff --git a/plugins/provisioners/chef/omnibus.rb b/plugins/provisioners/chef/omnibus.rb index 5c2eef2fb..897e5282d 100644 --- a/plugins/provisioners/chef/omnibus.rb +++ b/plugins/provisioners/chef/omnibus.rb @@ -1,32 +1,39 @@ module VagrantPlugins module Chef + # Read more about the Omnibus installer here: + # + # https://docs.chef.io/install_omnibus.html + # module Omnibus - OMNITRUCK = "https://www.chef.io/chef/install.sh".freeze + OMNITRUCK = "https://omnitruck.chef.io".freeze - # Read more about the Omnibus installer here: - # https://docs.getchef.com/install_omnibus.html - def build_command(version, prerelease = false, download_path = nil) - command = "curl -sL #{OMNITRUCK} | sudo bash" - - if prerelease || version != :latest || download_path != nil - command << " -s --" - end - - if prerelease - command << " -p" - end + def sh_command(project, version, channel, options = {}) + command = "curl -sL #{OMNITRUCK}/install.sh | sudo bash" + command << " -s -- -P \"#{project}\" -c \"#{channel}\"" if version != :latest command << " -v \"#{version}\"" end - if download_path - command << " -d \"#{download_path}\"" + if options[:download_path] + command << " -d \"#{options[:download_path]}\"" end command end - module_function :build_command + module_function :sh_command + + def ps_command(project, version, channel, options = {}) + command = ". { iwr -useb #{OMNITRUCK}/install.ps1 } | iex; install" + command << " -project '#{project}' -channel '#{channel}'" + + if version != :latest + command << " -version '#{version}'" + end + + command + end + module_function :ps_command end end end diff --git a/plugins/provisioners/chef/plugin.rb b/plugins/provisioners/chef/plugin.rb index 540429fad..f7af36138 100644 --- a/plugins/provisioners/chef/plugin.rb +++ b/plugins/provisioners/chef/plugin.rb @@ -53,29 +53,14 @@ module VagrantPlugins Provisioner::ChefZero end - guest_capability(:linux, :chef_installed) do - require_relative "cap/linux/chef_installed" - Cap::Linux::ChefInstalled - end - - guest_capability(:windows, :chef_installed) do - require_relative "cap/windows/chef_installed" - Cap::Windows::ChefInstalled - end - guest_capability(:debian, :chef_install) do require_relative "cap/debian/chef_install" Cap::Debian::ChefInstall end - guest_capability(:redhat, :chef_install) do - require_relative "cap/redhat/chef_install" - Cap::Redhat::ChefInstall - end - - guest_capability(:omnios, :chef_installed) do - require_relative "cap/omnios/chef_installed" - Cap::OmniOS::ChefInstalled + guest_capability(:linux, :chef_installed) do + require_relative "cap/linux/chef_installed" + Cap::Linux::ChefInstalled end guest_capability(:omnios, :chef_install) do @@ -83,6 +68,25 @@ module VagrantPlugins Cap::OmniOS::ChefInstall end + guest_capability(:omnios, :chef_installed) do + require_relative "cap/omnios/chef_installed" + Cap::OmniOS::ChefInstalled + end + + guest_capability(:redhat, :chef_install) do + require_relative "cap/redhat/chef_install" + Cap::Redhat::ChefInstall + end + + guest_capability(:windows, :chef_install) do + require_relative "cap/windows/chef_install" + Cap::Windows::ChefInstall + end + + guest_capability(:windows, :chef_installed) do + require_relative "cap/windows/chef_installed" + Cap::Windows::ChefInstalled + end end end end diff --git a/test/unit/plugins/provisioners/chef/omnibus_test.rb b/test/unit/plugins/provisioners/chef/omnibus_test.rb index b053f94bc..5e8c4aaea 100644 --- a/test/unit/plugins/provisioners/chef/omnibus_test.rb +++ b/test/unit/plugins/provisioners/chef/omnibus_test.rb @@ -3,53 +3,44 @@ require_relative "../../../base" require Vagrant.source_root.join("plugins/provisioners/chef/omnibus") describe VagrantPlugins::Chef::Omnibus do - let(:prefix) { "curl -sL #{described_class.const_get(:OMNITRUCK)}" } + describe "#sh_command" do + it "includes the project name" do + command = described_class.sh_command("chef", nil, "stable") + expect(command).to include %|-P "chef"| + end - let(:version) { :latest } - let(:prerelease) { false } - let(:download_path) { nil } + it "includes the channel" do + command = described_class.sh_command("chef", nil, "stable") + expect(command).to include %|-c "stable"| + end - let(:build_command) { described_class.build_command(version, prerelease, download_path) } + it "includes the version" do + command = described_class.sh_command("chef", "1.2.3", "stable") + expect(command).to include %|-v "1.2.3"| + end - context "when prerelease is given" do - let(:prerelease) { true } - - it "returns the correct command" do - expect(build_command).to eq("#{prefix} | sudo bash -s -- -p") + it "includes the download path" do + command = described_class.sh_command("chef", "1.2.3", "stable", + download_path: "/some/path", + ) + expect(command).to include %|-d "/some/path"| end end - context "when download_path is given" do - let(:download_path) { '/tmp/path/to/omnibuses' } - - it "returns the correct command" do - expect(build_command).to eq("#{prefix} | sudo bash -s -- -d \"/tmp/path/to/omnibuses\"") + describe "#ps_command" do + it "includes the project name" do + command = described_class.ps_command("chef", nil, "stable") + expect(command).to include %|-project 'chef'| end - end - context "when version is :latest" do - let(:version) { :latest } - - it "returns the correct command" do - expect(build_command).to eq("#{prefix} | sudo bash") + it "includes the channel" do + command = described_class.ps_command("chef", nil, "stable") + expect(command).to include %|-channel 'stable'| end - end - context "when version is a string" do - let(:version) { "1.2.3" } - - it "returns the correct command" do - expect(build_command).to eq("#{prefix} | sudo bash -s -- -v \"1.2.3\"") - end - end - - context "when prerelease and version and download_path are given" do - let(:version) { "1.2.3" } - let(:prerelease) { true } - let(:download_path) { "/some/path" } - - it "returns the correct command" do - expect(build_command).to eq("#{prefix} | sudo bash -s -- -p -v \"1.2.3\" -d \"/some/path\"") + it "includes the version" do + command = described_class.ps_command("chef", "1.2.3", "stable") + expect(command).to include %|-version '1.2.3'| end end end