def bootstrap(args, config, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) with settings(hide('warnings', 'stdout', 'stderr'), warn_only=True): result = sudo_dry("command -v chef-solo", args, logger=logger) if not result.failed: logger.info("-> Chef already boostrapped.") return logger.info("-> Installing Prerequisite Packages...") sudo_dry("apt-get update", args, logger=logger) sudo_dry("apt-get upgrade -y", args, logger=logger) sudo_dry("apt-get update", args, logger=logger) sudo_dry("apt-get install -y {0}".format(' '.join([ 'autoconf', 'binutils-doc', 'bison', 'build-essential', 'curl', 'flex', 'gcc', 'git-core', 'libreadline-dev', 'libssl-dev', 'libtool', 'libxml2-dev', 'libxslt-dev', 'zlib1g-dev', ])), args, logger=logger) ruby(args, config, logger=logger) gem(args, config, logger=logger)
def chef(args, config, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) install_url = 'curl -sSL https://www.opscode.com/chef/install.sh' install_command = '{0} | sudo bash -s -- -v {1}'.format( install_url, args['chef_version']) uninstall_command = 'gem uninstall -a chef ohai' logger.info("-> Installing Chef ...") response = sudo_dry(uninstall_command, args, logger=logger) if response: return sudo_dry(install_command, args, logger=logger) return response
def gem(args, config, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) logger.info("-> Installing Chef ...") gem_install_command = 'gem install -v {0} {1} --no-rdoc --no-ri' sudo_dry(gem_install_command.format( args['ohai_version'], 'ohai' ), args, logger=logger) return sudo_dry(gem_install_command.format( args['chef_version'], 'chef' ), args, logger=logger)
def chef(args, config, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) install_url = 'curl -sSL https://www.opscode.com/chef/install.sh' install_command = '{0} | sudo bash -s -- -v {1}'.format( install_url, args['chef_version'] ) uninstall_command = 'gem uninstall -a chef ohai' logger.info("-> Installing Chef ...") response = sudo_dry(uninstall_command, args, logger=logger) if response: return sudo_dry(install_command, args, logger=logger) return response
def clean(args, config, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) return sudo_dry('rm -rf {0}'.format( args['chef_file_dest'] ), args, logger=logger)
def clean(args, config, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) return sudo_dry('rm -rf {0}'.format(args['chef_file_dest']), args, logger=logger)
def default(args, config, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) sync(args, config, logger=logger) command = ' && '.join([ "cd {0}", "source /etc/profile", "`which chef-solo` -c {0}/{1} -j {0}/dna/{2} -l {3}" ]) return sudo_dry(command.format(args['chef_file_dest'], args['config_path'], 'default.json', args['loglevel']), args, logger=logger)
def ruby(args, config, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) logger.info("-> Installing Ruby 1.9.2") return sudo_dry("apt-get install -y {0}".format(' '.join([ 'ruby1.9.1', 'ruby1.9.1-dev', 'rubygems1.9.1', 'irb1.9.1', 'ri1.9.1', 'rdoc1.9.1', 'libopenssl-ruby1.9.1', ])), args, logger=logger)
def default(args, config, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) sync(args, config, logger=logger) command = ' && '.join([ "cd {0}", "source /etc/profile", "`which chef-solo` -c {0}/{1} -j {0}/dna/{2} -l {3}" ]) return sudo_dry(command.format( args['chef_file_dest'], args['config_path'], 'default.json', args['loglevel'] ), args, logger=logger)
def update(args, config, delete_files=False, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) sync(args, config, logger=logger) command = ' && '.join([ "cd {0}", "source /etc/profile", "`which chef-solo` -c {0}/{1} -j {0}/{2} -l {3}" ]) if delete_files: command += ' && rm -rf {0}'.format(args['chef_file_dest']) return sudo_dry(command.format(args['chef_file_dest'], args['config_path'], config.get('dna_path'), args['loglevel']), args, logger=logger)
def update(args, config, delete_files=False, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) sync(args, config, logger=logger) command = ' && '.join([ "cd {0}", "source /etc/profile", "`which chef-solo` -c {0}/{1} -j {0}/{2} -l {3}" ]) if delete_files: command += ' && rm -rf {0}'.format(args['chef_file_dest']) return sudo_dry(command.format( args['chef_file_dest'], args['config_path'], config.get('dna_path'), args['loglevel'] ), args, logger=logger)
def sync(args, config, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) if args['sync'] == "git": # TODO: Allow this to be any host add_line_if_not_present_dry(args, '~/.ssh/known_hosts', "github.com,207.97.227.239 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==", logger=logger) # noqa run_dry(' ; '.join([ 'if [ -d {1}/.git ]', 'then cd {1} && git pull origin master', 'else rm -rf {1} && git clone {0} {1}', 'fi' ]).format( args['repository'], args['chef_file_dest'] ), args, logger=logger) else: with settings(hide('stdout'), warn_only=True): rsync_exclusions = list(args['rsync_exclusions']) if not rsync_exclusions: rsync_exclusions = [] rsync_exclusions.append('.git') rsync_project_dry( args, logger=logger, extra_opts="-Caz", delete=True, exclude=rsync_exclusions, local_dir="./", remote_dir=args['chef_file_dest'], capture=True ) return sudo_dry("chmod -R a+w {0}".format( args['chef_file_dest'] ), args, logger=logger)
def test(args, config, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) return sudo_dry("hostname", args, logger=logger)
def sudo_command(args, config, logger=None): if logger is None: logger = setup_custom_logger('chef-solo-cup', args) return sudo_dry(args['cmd'], args, logger=logger)