Example #1
0
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')
Example #2
0
def upload(sync=True):
    "Uploads all pillars, modules, and states to the remote server."
    runner.action("Upload Salt Data")
    with runner.with_prefix(' ~> '):
        runner.state("Clear existing data")
        sudo('rm -rf {0}'.format(SALT_DIR))
        sudo('mkdir -p {0}'.format(SALT_DIR))
        for system in env.configs:
            runner.state("Upload configuration: " + system)
            for dirname in ('states', 'pillars'):
                src = os.path.join(CONFIG_DIR, system, dirname)
                path = os.path.join(SALT_DIR, system)
                dest = os.path.join(path, dirname)
                runner.state("    - {0}/{1}".format(system, dirname))
                upload_project(src)
                # remove dot files
                sudo('find {0} -name ".*" | xargs rm -rf'.format(dirname))
                # remove pyc files
                sudo('find {0} -name "*.pyc" | xargs rm -rf'.format(dirname))
                with settings(warn_only=True):
                    sudo('mkdir -p {0}'.format(path))
                    sudo('mv {0} {1}'.format(dirname, dest))
        if sync:
            runner.state("Sync pillar data to minions")
            sudo("salt '*' saltutil.refresh_pillar")
            runner.state("Sync states and modules to minions")
            sudo("salt '*' saltutil.sync_all")
Example #3
0
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))
Example #4
0
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)
Example #5
0
def upgrade_bleeding():
    "Upgrades the bleeding edge and reinstall it."
    runner.action('Upgrade bleeding edge salt installation')
    with runner.with_prefix(' ~> '):
        service('salt-master', 'stop')
        service('salt-minion', 'stop')
        time.sleep(1)
        with cd('/opt/saltstack/'):
            sudo('git pull origin master')
            sudo('python setup.py install')
            service('salt-master', 'start')
            service('salt-minion', 'start')
Example #6
0
def deploy(filter='*', upload=1, sync=1, debug=0):
    """Tells master to send pillars and execute salt state files on clients.

    If debug is set to 'yes', runs locally with more debugging information output.
    If upload is set to 'yes', then uploads current salt configurations to the master before deploying.
    """
    runner.action('Deploying salt files')
    output = ''
    with runner.with_prefix('  '):
        # if has('/opt/saltstack/', 'test -e %(app)s'):
        #     lowlevel.upgrade_bleeding()
        if boolean(upload):
            lowlevel.upload()
        if boolean(sync):
            if boolean(debug):
                cmd = "salt-call state.highstate -l debug"
            else:    
                cmd = "salt '{0}' state.highstate".format(filter)
            runner.action('Ensuring minion state')
            with show('stdout', 'stderr'):
                out = runner.sudo(cmd, combine_stderr=True)
            with open('sync.log', 'w+') as handle:
                handle.write(out)
            runner.action('Wrote output to sync.log')
Example #7
0
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()
Example #8
0
def reboot():
    runner.action('Rebooting')
    _reboot()
    runner.action('Done')