def bootstrap_with_aptget(upgrade): "Bootstraps installation of saltstalk on the remote machine" apt = find_pkgmgr() apt.update() requires_update = True runner.state('Add salt repository') if is_distro('ubuntu'): apt.install('python-software-properties') sudo('add-apt-repository ppa:saltstack/salt -y') elif is_distro('debian'): if not apt.has('salt-master'): runner.state("Add debian backports to repositories") sudo('''cat <<EOF | sudo tee /etc/apt/sources.list.d/backports.list deb http://backports.debian.org/debian-backports squeeze-backports main EOF''') else: runner.state("Already has salt packages") requires_update = False else: raise TypeError("Unknowned OS") if upgrade: upgrade_all_packages() if requires_update: apt.update()
def convert_to_bleeding(): "Converts the master installation to bleeding edge." runner.action('Convert Salt to bleeding edge') if runner.silent('test -d /opt/saltstack', use_sudo=True): runner.state('Already installed.') return with runner.with_prefix(' ~> '): pkgmgr = find_pkgmgr() pkgmgr.install('python') pkgmgr.install('python-dev') pkgmgr.install('python-pip') sudo('yes | pip install pyzmq PyYAML pycrypto msgpack-python jinja2 psutil') pkgmgr.install('salt-common') runner.silent('pkill salt-master', use_sudo=True) runner.silent('pkill salt-minion', use_sudo=True) time.sleep(1) pkgmgr.remove('salt-master') pkgmgr.remove('salt-minion') pkgmgr.install('git-core') runner.silent('rm -rf /opt/saltstack', use_sudo=True) runner.silent('mkdir /opt', use_sudo=True) with cd('/opt'): sudo('git clone {0} {1}'.format(env.salt_bleeding, 'saltstack')) with cd('/opt/saltstack/'): sudo('python setup.py install')
def bootstrap(upgrade=False): "Performs a bootstrap depending on the operating system." runner.action('Bootstrapping salt') with runner.with_prefix(' ~> '): pkgmgr = find_pkgmgr() bootstrappers = { 'apt': bootstrap_with_aptget, } runner.silent('rm -rf /etc/salt/') runner.silent('rm -rf /opt/salt/') bootstrappers[pkgmgr.name](boolean(upgrade))
def minion(master, hostname, roles=()): """Sets up the salt-minion on the remote server. Argument should be the ip address of the salt master. """ runner.action('Set up minion daemon') with runner.with_prefix(' ~> '): pkgmgr = find_pkgmgr() pkgmgr.install('salt-minion') upload_minion_key(hostname) upload_minion_config(master, roles)
def upgrade_all_packages(): "Updates all packages" find_pkgmgr().upgrade() reboot_if_required()
def master(): "Sets up the salt-master on the remote server." runner.action('Set up master daemon') with runner.with_prefix(' ~> '): find_pkgmgr().install('salt-master') upload_master_config()