Update the omnibus_updater chef recipe

This commit is contained in:
Neil Lalonde 2013-07-05 10:56:57 -04:00
parent 594cb50f18
commit f7f9406b83
25 changed files with 274 additions and 341 deletions

View file

@ -1,5 +1,7 @@
.bundle .*
.cache !.gitignore
.kitchen !.kitchen.yml
bin bin
Gemfile.lock Gemfile.lock
Cheffile.lock
tmp*

View file

@ -0,0 +1,28 @@
---
driver_plugin: vagrant
platforms:
- name: ubuntu-12.04
driver_config:
box: opscode-ubuntu-12.04
box_url: https://opscode-vm.s3.amazonaws.com/vagrant/boxes/opscode-ubuntu-12.04.box
- name: ubuntu-10.04
driver_config:
box: opscode-ubuntu-10.04
box_url: https://opscode-vm.s3.amazonaws.com/vagrant/boxes/opscode-ubuntu-10.04.box
- name: centos-6.4
driver_config:
box: opscode-centos-6.4
box_url: https://opscode-vm.s3.amazonaws.com/vagrant/boxes/opscode-centos-6.3.box
- name: centos-5.8
driver_config:
box: opscode-centos-5.8
box_url: https://opscode-vm.s3.amazonaws.com/vagrant/boxes/opscode-centos-5.8.box
suites:
- name: default
run_list:
- recipe[omnibus_updater_test::default]
- recipe[minitest-handler]
- name: upgrade
run_list:
- recipe[omnibus_updater_test::version_upgrade]
- recipe[minitest-handler]

View file

@ -1,3 +1,17 @@
v0.2.4
======
* Only download omnibus package if version difference detected (#20 #22 #23)
* Provide attribute for always downloading package even if version matches
v0.2.3
======
* Use chef internals for interactions with omnitruck to provide proper proxy support (#19)
v0.2.0
======
* Use omnitruck client for url generation for package fetching
* Use `prerelease` in favor of `allow_release_clients`
v0.1.2 v0.1.2
====== ======
* Fix regression on debian package path construction (thanks [ashmere](https://github.com/ashmere)) * Fix regression on debian package path construction (thanks [ashmere](https://github.com/ashmere))

View file

@ -0,0 +1,4 @@
site 'http://community.opscode.com/api/v1'
cookbook 'omnibus_updater', path: './'
cookbook 'omnibus_updater_test', path: './test/kitchen/cookbooks/omnibus_updater_test'

View file

@ -1,3 +1,3 @@
source :rubygems source :rubygems
gem 'test-kitchen' gem 'vagabond'

View file

@ -14,13 +14,13 @@ be installed on the node:
`knife node run_list add recipe[omnibus_updater]` `knife node run_list add recipe[omnibus_updater]`
In your role you'll likely want to set the version (it defaults In your role you'll likely want to set the version. It defaults
to the 0.10.10 version of Chef): to nothing, and will install the latest..
``` ```
override_attributes( override_attributes(
:omnibus_updater => { :omnibus_updater => {
:version => '10.16.2' :version => '11.4.0'
} }
) )
``` ```
@ -35,37 +35,30 @@ override_attributes(
} }
) )
``` ```
---
If you are using a Chef version earlier than 10.12.0 you may want
to take a look at the chef_gem cookbook to ensure gems are going
where expected.
---
The default recipe will install the omnibus package based
on system information but you can override that by using
the `install_via` attribute which accepts: deb, rpm or script.
Features Features
======== ========
Auto version expansion Latest Version
---------------------- --------------
Versions for the omnibus installer are defined as: x.y.z-n If the `:version` attribute only provides Force installation of the latest version regardless of value stored in version
x.y.z the `n` value will be automatically filled in with the latest available version. attribute by setting the `force_latest` attribute.
Auto version searching Chef Killing
---------------------- ------------
Using the `:version_search` attribute, the latest stable version of the omnibus installer will By default the omnibus updater will kill the chef instance by raising and exception.
be installed automatically as they become available. You can turn this off using the `kill_chef_on_upgrade` attribute. It is not
recommended to turn this off. Internal chef libraries may change, move, or no
longer exist. The currently running instance can encounter unexpected states because
of this. To prevent this, the updater will attempt to kill the Chef instance so
that it can be restarted in a normal state.
Release clients Prerelease
--------------- --------
Release clients can be installed via the auto-installation using `:allow_release_clients` attribute. Prereleases can be installed via the auto-installation using `prerelease` attribute.
Disable Disable
------- -------
@ -79,4 +72,4 @@ Infos
* Repo: https://github.com/hw-cookbooks/omnibus_updater * Repo: https://github.com/hw-cookbooks/omnibus_updater
* IRC: Freenode @ #heavywater * IRC: Freenode @ #heavywater
* Cookbook: http://ckbk.it/omnibus_updater

View file

@ -1,8 +1,9 @@
default[:omnibus_updater][:version] = '10.18.2' default[:omnibus_updater][:version] = nil
default[:omnibus_updater][:version_search] = false default[:omnibus_updater][:force_latest] = false
default[:omnibus_updater][:base_uri] = 'http://opscode-omnibus-packages.s3.amazonaws.com'
default[:omnibus_updater][:cache_dir] = '/opt' default[:omnibus_updater][:cache_dir] = '/opt'
default[:omnibus_updater][:cache_omnibus_installer] = false default[:omnibus_updater][:cache_omnibus_installer] = false
default[:omnibus_updater][:remove_chef_system_gem] = false default[:omnibus_updater][:remove_chef_system_gem] = false
default[:omnibus_updater][:allow_release_clients] = false default[:omnibus_updater][:prerelease] = false
default[:omnibus_updater][:disabled] = false default[:omnibus_updater][:disabled] = false
default[:omnibus_updater][:kill_chef_on_upgrade] = true
default[:omnibus_updater][:always_download] = false

View file

@ -0,0 +1,64 @@
module OmnibusTrucker
class << self
URL_MAP = {
:p => :platform, :pv => :platform_version, :m => :machine,
:v => :version, :prerelease => :prerelease,
:nightlies => :nightlies
}
def build_url(*opts)
args = node = nil
opts.each do |o|
if(o.kind_of?(Hash))
args = o
elsif(o.kind_of?(Chef::Node))
node = o
else
raise ArgumentError.new "Provided argument is not allowed: #{o.class}"
end
end
args ||= {}
if(node)
args = collect_attributes(node).merge(args)
end
url = args[:url] || "http://www.opscode.com/chef/download#{'-server' if args[:server]}"
u_args = URL_MAP.map do |u_k, a_k|
"#{u_k}=#{args[a_k]}" unless args[a_k].nil?
end.compact
"#{url}?#{u_args.join('&')}"
end
def collect_attributes(node, args={})
set = Hash[*(
[:platform_family, :platform, :platform_version].map do |k|
[k, args[k] || node[k]]
end.flatten.compact
)]
unless(@attrs)
if(set[:platform_family] == 'rhel')
@attrs = {:platform => 'el', :platform_version => set[:platform_version].to_i}
else
@attrs = {:platform => set[:platform], :platform_version => set[:platform_version]}
end
@attrs[:machine] = args[:machine] || node[:kernel][:machine]
end
@attrs
end
def url(url_or_node, node = nil)
if(url_or_node.is_a?(Chef::Node))
url = build_url(url_or_node)
node = url_or_node
else
url = url_or_node
raise "Node instance is required for Omnitruck.url!" unless node
end
request = Chef::REST::RESTRequest.new(:head, URI.parse(url), nil)
result = request.call
if(result.kind_of?(Net::HTTPRedirection))
result['location']
end
end
end
end

View file

@ -1,29 +0,0 @@
{
"name": "omnibus_updater",
"description": "Chef omnibus package updater and installer",
"long_description": "OmnibusUpdater\n==============\n\nUpdate your omnibus! This cookbook can install the omnibus\nChef package into your system if you are currently running\nvia gem install, and it can keep your omnibus install up\nto date.\n\nUsage\n=====\n\nAdd the recipe to your run list and specify what version should\nbe installed on the node:\n\n`knife node run_list add recipe[omnibus_updater]`\n\nIn your role you'll likely want to set the version (it defaults\nto the 0.10.10 version of Chef):\n\n```\noverride_attributes(\n :omnibus_updater => {\n :version => '10.16.2'\n }\n)\n```\n\nIt can also uninstall Chef from the system Ruby installation\nif you tell it to:\n\n```\noverride_attributes(\n :omnibus_updater => {\n :remove_chef_system_gem => true\n }\n)\n```\n---\n\nIf you are using a Chef version earlier than 10.12.0 you may want\nto take a look at the chef_gem cookbook to ensure gems are going\nwhere expected.\n\n---\n\nThe default recipe will install the omnibus package based\non system information but you can override that by using\nthe `install_via` attribute which accepts: deb, rpm or script.\n\nFeatures\n========\n\nAuto version expansion\n----------------------\n\nVersions for the omnibus installer are defined as: x.y.z-n If the `:version` attribute only provides\nx.y.z the `n` value will be automatically filled in with the latest available version.\n\nAuto version searching\n----------------------\n\nUsing the `:version_search` attribute, the latest stable version of the omnibus installer will\nbe installed automatically as they become available.\n\nRelease clients\n---------------\n\nRelease clients can be installed via the auto-installation using `:allow_release_clients` attribute.\n\nDisable\n-------\n\nIf you want to disable the updater you can set the `disabled`\nattribute to true. This might be useful if the cookbook is added\nto a role but should then be skipped for example on a Chef server.\n\nInfos\n=====\n\n* Repo: https://github.com/hw-cookbooks/omnibus_updater\n* IRC: Freenode @ #heavywater\n\n",
"maintainer": "Chris Roberts",
"maintainer_email": "chrisroberts.code@gmail.com",
"license": "Apache 2.0",
"platforms": {
},
"dependencies": {
},
"recommendations": {
},
"suggestions": {
},
"conflicting": {
},
"providing": {
},
"replacing": {
},
"attributes": {
},
"groupings": {
},
"recipes": {
},
"version": "0.1.2"
}

View file

@ -1,7 +1,8 @@
name "omnibus_updater"
maintainer "Chris Roberts" maintainer "Chris Roberts"
maintainer_email "chrisroberts.code@gmail.com" maintainer_email "chrisroberts.code@gmail.com"
license "Apache 2.0" license "Apache 2.0"
description "Chef omnibus package updater and installer" description "Chef omnibus package updater and installer"
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version "0.1.2" version "0.2.4"

View file

@ -1,18 +0,0 @@
# NOTE: This recipe is here for others that just want the
# package, not the actual installation (lxc for example)
include_recipe 'omnibus_updater::set_remote_path'
remote_file "chef omnibus_package_downloader[#{File.basename(node[:omnibus_updater][:full_uri])}]" do
path File.join(node[:omnibus_updater][:cache_dir], File.basename(node[:omnibus_updater][:full_uri]))
source node[:omnibus_updater][:full_uri]
backup false
only_if do
node[:omnibus_updater][:cache_omnibus_installer] &&
!File.exists?(
File.join(node[:omnibus_updater][:cache_dir], File.basename(node[:omnibus_updater][:full_uri]))
)
end
end
include_recipe 'omnibus_updater::old_package_cleaner'

View file

@ -1,30 +0,0 @@
include_recipe 'omnibus_updater::set_remote_path'
remote_file "chef omnibus_package[#{File.basename(node[:omnibus_updater][:full_uri])}]" do
path File.join(node[:omnibus_updater][:cache_dir], File.basename(node[:omnibus_updater][:full_uri]))
source node[:omnibus_updater][:full_uri]
backup false
not_if do
File.exists?(
File.join(node[:omnibus_updater][:cache_dir], File.basename(node[:omnibus_updater][:full_uri]))
) || (
Chef::VERSION.to_s.scan(/\d+\.\d+\.\d+/) == node[:omnibus_updater][:full_version].scan(/\d+\.\d+\.\d+/) && OmnibusChecker.is_omnibus?
)
end
notifies :create, 'ruby_block[Omnibus Chef install notifier]', :delayed
end
ruby_block 'Omnibus Chef install notifier' do
block do
true
end
action :nothing
notifies :run, "execute[chef omnibus_install[#{node[:omnibus_updater][:full_version]}]]", :delayed
end
execute "chef omnibus_install[#{node[:omnibus_updater][:full_version]}]" do
command "dpkg -i #{File.join(node[:omnibus_updater][:cache_dir], File.basename(node[:omnibus_updater][:full_uri]))}"
action :nothing
end
include_recipe 'omnibus_updater::old_package_cleaner'

View file

@ -1,25 +1,10 @@
if node[:omnibus_updater][:disabled] if(node[:omnibus_updater][:disabled])
Chef::Log.warn 'Omnibus updater disabled via `disabled` attribute' Chef::Log.warn 'Omnibus updater disabled via `disabled` attribute'
elsif node[:omnibus_updater][:install_via]
case node[:omnibus_updater][:install_via]
when 'deb'
include_recipe 'omnibus_updater::deb_package'
when 'rpm'
include_recipe 'omnibus_updater::rpm_package'
when 'script'
include_recipe 'omnibus_updater::script'
else
raise "Unknown omnibus update method requested: #{node[:omnibus_updater][:install_via]}"
end
else else
case node.platform_family include_recipe 'omnibus_updater::downloader'
when 'debian' include_recipe 'omnibus_updater::installer'
include_recipe 'omnibus_updater::deb_package'
when 'fedora', 'rhel'
include_recipe 'omnibus_updater::rpm_package'
else
include_recipe 'omnibus_updater::script'
end
end end
include_recipe 'omnibus_updater::remove_chef_system_gem' if node[:omnibus_updater][:remove_chef_system_gem] if(node[:omnibus_updater][:remove_chef_system_gem])
include_recipe 'omnibus_updater::remove_chef_system_gem'
end

View file

@ -0,0 +1,36 @@
# NOTE: This recipe is here for others that just want the
# package, not the actual installation (lxc for example)
if(node[:omnibus_updater][:direct_url])
remote_path = node[:omnibus_updater][:direct_url]
else
version = node[:omnibus_updater][:version] || ''
remote_path = OmnibusTrucker.url(
OmnibusTrucker.build_url(node,
:version => node[:omnibus_updater][:force_latest] ? nil : version.sub(/\-.+$/, ''),
:prerelease => node[:omnibus_updater][:preview]
), node
)
end
if(remote_path)
node.set[:omnibus_updater][:full_url] = remote_path
Chef::Log.info "Omnibus Updater remote path: #{remote_path}"
remote_file "omnibus_remote[#{File.basename(remote_path)}]" do
path File.join(node[:omnibus_updater][:cache_dir], File.basename(remote_path))
source remote_path
backup false
action :create_if_missing
only_if do
unless(version = node[:omnibus_updater][:version])
version = node[:omnibus_updater][:full_url].scan(%r{chef_(\d+\.\d+.\d+)}).flatten.first
end
node[:omnibus_updater][:always_download] || Chef::VERSION != version.to_s.sub(/\-.+$/, '')
end
end
else
Chef::Log.warn 'Failed to retrieve omnibus download URL'
end
include_recipe 'omnibus_updater::old_package_cleaner'

View file

@ -0,0 +1,36 @@
include_recipe 'omnibus_updater'
remote_path = node[:omnibus_updater][:full_url].to_s
ruby_block 'Omnibus Chef install notifier' do
block{ true }
action :nothing
subscribes :create, "remote_file[omnibus_remote[#{File.basename(remote_path)}]]", :immediately
notifies :run, "execute[omnibus_install[#{File.basename(remote_path)}]]", :delayed
end
execute "omnibus_install[#{File.basename(remote_path)}]" do
case File.extname(remote_path)
when '.deb'
command "dpkg -i #{File.join(node[:omnibus_updater][:cache_dir], File.basename(remote_path))}"
when '.rpm'
command "rpm -Uvh #{File.join(node[:omnibus_updater][:cache_dir], File.basename(remote_path))}"
when '.sh'
command "/bin/sh #{File.join(node[:omnibus_updater][:cache_dir], File.basename(remote_path))}"
else
raise "Unknown package type encountered for install: #{File.extname(remote_path)}"
end
action :nothing
notifies :create, 'ruby_block[omnibus chef killer]', :immediately
end
ruby_block 'omnibus chef killer' do
block do
raise 'New omnibus chef version installed. Killing Chef run!'
end
action :nothing
only_if do
node[:omnibus_updater][:kill_chef_on_upgrade]
end
end
include_recipe 'omnibus_updater::old_package_cleaner'

View file

@ -1,7 +1,7 @@
old_pkgs = old_pkgs =
if(::File.exist?(node[:omnibus_updater][:cache_dir])) if(::File.exist?(node[:omnibus_updater][:cache_dir]))
Dir.glob(File.join(node[:omnibus_updater][:cache_dir], 'chef*')).find_all do |file| Dir.glob(File.join(node[:omnibus_updater][:cache_dir], 'chef*')).find_all do |file|
!file.include?(node[:omnibus_updater][:version]) && !file.scan(/\.(rpm|deb)$/).empty? !file.include?(node[:omnibus_updater][:version].to_s) && !file.scan(/\.(rpm|deb)$/).empty?
end end
else else
[] []

View file

@ -1,30 +0,0 @@
include_recipe 'omnibus_updater::set_remote_path'
remote_file "chef omnibus_package[#{File.basename(node[:omnibus_updater][:full_uri])}]" do
path File.join(node[:omnibus_updater][:cache_dir], File.basename(node[:omnibus_updater][:full_uri]))
source node[:omnibus_updater][:full_uri]
backup false
not_if do
File.exists?(
File.join(node[:omnibus_updater][:cache_dir], File.basename(node[:omnibus_updater][:full_uri]))
) || (
Chef::VERSION.to_s.scan(/\d+\.\d+\.\d+/) == node[:omnibus_updater][:full_version].scan(/\d+\.\d+\.\d+/) && OmnibusChecker.is_omnibus?
)
end
notifies :create, 'ruby_block[Omnibus Chef install notifier]', :delayed
end
ruby_block 'Omnibus Chef install notifier' do
block do
true
end
action :nothing
notifies :run, "execute[chef omnibus_install[#{node[:omnibus_updater][:full_version]}]]", :delayed
end
execute "chef omnibus_install[#{node[:omnibus_updater][:full_version]}]" do
command "rpm -Uvh #{File.join(node[:omnibus_updater][:cache_dir], File.basename(node[:omnibus_updater][:full_uri]))}"
action :nothing
end
include_recipe 'omnibus_updater::old_package_cleaner'

View file

@ -1,38 +0,0 @@
include_recipe 'omnibus_updater::set_remote_path'
remote_file "chef omnibus_script[#{File.basename(node[:omnibus_updater][:full_uri])}]" do
path File.join(node[:omnibus_updater][:cache_dir], File.basename(node[:omnibus_updater][:full_uri]))
source node[:omnibus_updater][:full_uri]
backup false
not_if do
File.exists?(
File.join(node[:omnibus_updater][:cache_dir], File.basename(node[:omnibus_updater][:full_uri]))
) || (
Chef::VERSION.to_s.scan(/\d+\.\d+\.\d+/) == node[:omnibus_updater][:full_version].scan(/\d+\.\d+\.\d+/) && OmnibusChecker.is_omnibus?
)
end
end
# NOTE: We do not use notifications to trigger the install
# since they are broken with remote_file in 0.10.10
execute "chef omnibus_install[#{node[:omnibus_updater][:full_version]}]" do
command "bash #{File.join(node[:omnibus_updater][:cache_dir], File.basename(node[:omnibus_updater][:full_uri]))}"
only_if do
(File.exists?(
File.join(node[:omnibus_updater][:cache_dir], File.basename(node[:omnibus_updater][:full_uri]))
) &&
Chef::VERSION.to_s.scan(/\d+\.\d+\.\d+/) != node[:omnibus_updater][:full_version].scan(/\d+\.\d+\.\d+/)) ||
!OmnibusChecker.is_omnibus?
end
end
ruby_block "omnibus_updater[remove old install scripts]" do
block do
Dir.glob(File.join(node[:omnibus_updater][:cache_dir], 'chef*.sh')).each do |file|
unless(file.include?(node[:omnibus_updater][:version]))
Chef::Log.info "Deleting stale omnibus script: #{file}"
File.delete(file)
end
end
end
end

View file

@ -1,139 +0,0 @@
# RULES
if(node[:omnibus_updater][:version].nil? && !node[:omnibus_updater][:version_search])
raise "Omnibus Updater cannot determine version installation request. Please set version of enable version search"
end
if(node[:omnibus_updater][:version_search])
Chef::Log.warn "Omnibus Updater is set to automatically upgrade via search!"
if(node[:omnibus_updater][:allow_release_clients])
Chef::Log.warn "Omnibus Updater will allow installation of release clients found via search!"
end
end
if(!node[:omnibus_updater][:version].to_s.include?('-') || node[:omnibus_updater][:version_search])
require 'open-uri'
require 'rexml/document'
pkgs_doc = REXML::Document.new(open(node[:omnibus_updater][:base_uri]))
pkgs_avail = pkgs_doc.elements.to_a('//Contents//Key').map(&:text).find_all do |f|
(f.include?('.rpm') || f.include?('.deb')) && f.include?('chef') &&
!f.include?('server') && (node[:omnibus_updater][:allow_release_clients] || !f.include?('.rc')) &&
!f.scan(/\d+\.\d+\.\d+-\d+\./).empty?
end
unless(node[:omnibus_updater][:version_search])
searched_ver = pkgs_avail.find_all{|x| x.include?(node[:omnibus_updater][:version]) }.sort.last
unless(searched_ver)
raise "Omnibus Updater failed to find a valid version string. Base version requested: #{node[:omnibus_updater][:version]}"
else
node.set[:omnibus_updater][:full_version] = searched_ver.scan(/\d+\.\d+\.\d+-\d+/).first
node.set[:omnibus_updater][:version] = node[:omnibus_updater][:full_version].sub(/-\d+$/,'')
end
end
else
node.set[:omnibus_updater][:full_version] = node[:omnibus_updater][:version]
end
platform_name = node.platform
platform_majorversion = ""
kernel_name = node.kernel.machine
case node.platform_family
when 'debian'
if(node.platform == 'ubuntu')
platform_version = case node.platform_version
when '10.10', '10.04'
platform_majorversion << '10.04'
'10.04'
when '12.10', '12.04', '11.10', '11.04'
platform_majorversion << '11.04'
'11.04'
else
raise 'Unsupported ubuntu version for deb packaged omnibus'
end
else
platform_version = case pv = node.platform_version.split('.').first
when '6', '5'
platform_majorversion << '6'
'6.0.5'
else
platform_majorversion << pv
pv
end
end
when 'fedora', 'rhel'
platform_version = node.platform_version.split('.').first
platform_name = 'el'
platform_majorversion << platform_version
else
platform_version = node.platform_version
end
if(node[:omnibus_updater][:install_via])
install_via = node[:omnibus_updater][:install_via]
else
install_via = case node.platform_family
when 'debian'
'deb'
when 'fedora', 'rhel', 'centos'
'rpm'
else
raise 'Unsupported omnibus install method requested'
end
end
case install_via
when 'deb'
if(pkgs_avail)
path_name = pkgs_avail.find_all{ |path|
ver = node[:omnibus_updater][:version] || '.'
path.include?('.deb') && path.include?(platform_name) &&
path.include?(platform_version) && path.include?(node.kernel.machine) &&
path.include?(ver)
}.sort.last
else
kernel_name = ""
file_name = "chef_#{node[:omnibus_updater][:full_version]}.#{platform_name}.#{platform_version}_"
if(node.kernel.machine.include?('64'))
file_name << 'amd64'
kernel_name << 'x86_64'
else
file_name << 'i386'
kernel_name << 'i686'
end
file_name << '.deb'
end
when 'rpm'
if(pkgs_avail)
path_name = pkgs_avail.find_all{ |path|
ver = node[:omnibus_updater][:version] || '.'
path.include?('.rpm') && path.include?(platform_name) &&
path.include?(platform_version) && path.include?(node.kernel.machine) &&
path.include?(ver)
}.sort.last
else
file_name = "chef-#{node[:omnibus_updater][:full_version]}.#{platform_name}#{platform_version}.#{node.kernel.machine}.rpm"
end
else
raise 'Unsupported install via provided'
end
remote_omnibus_file = if(path_name)
File.join(node[:omnibus_updater][:base_uri], path_name)
else
File.join(
node[:omnibus_updater][:base_uri],
platform_name,
platform_majorversion,
kernel_name,
file_name
)
end
unless(remote_omnibus_file == node[:omnibus_updater][:full_uri])
node.override[:omnibus_updater][:full_uri] = remote_omnibus_file
Chef::Log.info "Omnibus remote file location: #{remote_omnibus_file}"
end
unless(node[:omnibus_updater][:full_version])
node.set[:omnibus_updater][:version] = remote_omnibus_file.scan(%r{chef[_-](\d+.\d+.\d+-\d+)}).flatten.first
node.set[:omnibus_updater][:full_version] = node[:omnibus_updater][:version]
end

View file

@ -0,0 +1,6 @@
cookbook "omnibus_updater" do
configuration "default"
configuration "version_upgrade"
configuration "search"
lint false
end

View file

@ -0,0 +1,14 @@
require 'minitest/spec'
require 'open-uri'
describe_recipe 'omnibus_updater_test::default' do
include MiniTest::Chef::Assertions
it "sets remote package location" do
assert(node[:omnibus_updater][:full_url], "Failed to set URI for omnibus package")
end
it "does not download the package to the node" do
file("/opt/#{File.basename(node[:omnibus_updater][:full_url])}").wont_exist
end
end

View file

@ -0,0 +1,23 @@
require 'minitest/spec'
require 'rexml/document'
require 'open-uri'
describe_recipe 'omnibus_updater_test::version_upgrade' do
include MiniTest::Chef::Assertions
it "sets remote package location" do
assert(node[:omnibus_updater][:full_url], "Failed to set URI for omnibus package")
end
it "downloads the package to the node" do
file("/opt/#{File.basename(node[:omnibus_updater][:full_url])}").must_exist
end
it "installs the proper version into the node" do
assert_equal(
node[:omnibus_updater][:version].scan(/^\d+\.\d+\.\d+/).first,
`chef-client --version`.strip.scan(/\d+\.\d+\.\d+/).first,
"Installed chef version does not match version requested"
)
end
end

View file

@ -0,0 +1,4 @@
name 'omnibus_updater_test'
version '0.0.1'
depends "omnibus_updater"
depends "minitest-handler"

View file

@ -0,0 +1,3 @@
node.set[:omnibus_updater][:kill_chef_on_upgrade] = false
node.set[:omnibus_updater][:version] = false
include_recipe "omnibus_updater"

View file

@ -0,0 +1,3 @@
node.set[:omnibus_updater][:version] = '11.2.0'
node.set[:omnibus_updater][:kill_chef_on_upgrade] = false
include_recipe "omnibus_updater"