add 'omnibus' as an install type for chef.
Thanks to Anatoliy Dobrosynets
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
- fix sudoers writing when entry is a string (LP: #1079002)
|
||||
- tools/write-ssh-key-fingerprints: use '-s' rather than '--stderr'
|
||||
option (LP: #1083715)
|
||||
- support omnibus installer for chef [Anatoliy Dobrosynets]
|
||||
0.7.1:
|
||||
- sysvinit: fix missing dependency in cloud-init job for RHEL 5.6
|
||||
- config-drive: map hostname to local-hostname (LP: #1061964)
|
||||
|
||||
@@ -22,6 +22,7 @@ import json
|
||||
import os
|
||||
|
||||
from cloudinit import templater
|
||||
from cloudinit import url_helper
|
||||
from cloudinit import util
|
||||
|
||||
RUBY_VERSION_DEFAULT = "1.8"
|
||||
@@ -35,6 +36,8 @@ CHEF_DIRS = [
|
||||
'/var/run/chef',
|
||||
]
|
||||
|
||||
OMNIBUS_URL = "https://www.opscode.com/chef/install.sh"
|
||||
|
||||
|
||||
def handle(name, cfg, cloud, log, _args):
|
||||
|
||||
@@ -83,7 +86,9 @@ def handle(name, cfg, cloud, log, _args):
|
||||
util.write_file('/etc/chef/firstboot.json', json.dumps(initial_json))
|
||||
|
||||
# If chef is not installed, we install chef based on 'install_type'
|
||||
if not os.path.isfile('/usr/bin/chef-client'):
|
||||
if (not os.path.isfile('/usr/bin/chef-client') or
|
||||
util.get_cfg_option_bool(chef_cfg, 'force_install', default=False)):
|
||||
|
||||
install_type = util.get_cfg_option_str(chef_cfg, 'install_type',
|
||||
'packages')
|
||||
if install_type == "gems":
|
||||
@@ -99,6 +104,14 @@ def handle(name, cfg, cloud, log, _args):
|
||||
elif install_type == 'packages':
|
||||
# this will install and run the chef-client from packages
|
||||
cloud.distro.install_packages(('chef',))
|
||||
elif install_type == 'omnibus':
|
||||
url = util.get_cfg_option_str(chef_cfg, "omnibus_url", OMNIBUS_URL)
|
||||
content = url_helper.readurl(url=url, retries=5)
|
||||
with util.tempdir() as tmpd:
|
||||
# use tmpd over tmpfile to avoid 'Text file busy' on execute
|
||||
tmpf = "%s/chef-omnibus-install" % tmpd
|
||||
util.write_file(tmpf, content, mode=0700)
|
||||
util.subp([tmpf], capture=False)
|
||||
else:
|
||||
log.warn("Unknown chef install type %s", install_type)
|
||||
|
||||
|
||||
@@ -47,9 +47,13 @@ apt_sources:
|
||||
|
||||
chef:
|
||||
|
||||
# Valid values are 'gems' and 'packages'
|
||||
# Valid values are 'gems' and 'packages' and 'omnibus'
|
||||
install_type: "packages"
|
||||
|
||||
# Boolean: run 'install_type' code even if chef-client
|
||||
# appears already installed.
|
||||
force_install: false
|
||||
|
||||
# Chef settings
|
||||
server_url: "https://chef.yourorg.com:4000"
|
||||
|
||||
@@ -80,6 +84,9 @@ chef:
|
||||
maxclients: 100
|
||||
keepalive: "off"
|
||||
|
||||
# if install_type is 'omnibus', change the url to download
|
||||
omnibus_url: "https://www.opscode.com/chef/install.sh"
|
||||
|
||||
|
||||
# Capture all subprocess output into a logfile
|
||||
# Useful for troubleshooting cloud-init issues
|
||||
|
||||
Reference in New Issue
Block a user