예제 #1
0
def test_augment_ezjail_master_playbook_explicit(ctrl, ployconf, tempdir):
    from ploy_ansible import has_playbook
    ployconf.fill(['[ez-master:jailhost]', 'playbook = blubber.yml'])
    config = dict(ctrl.instances['jailhost'].config)
    assert 'roles' not in config
    assert config['playbook'] == 'blubber.yml'
    assert has_playbook(ctrl.instances['jailhost'])
예제 #2
0
def test_augment_ezjail_master_playbook_implicit(ctrl, ployconf, tempdir):
    from ploy_ansible import has_playbook
    jailhost_yml = tempdir['jailhost.yml']
    jailhost_yml.fill('')
    config = dict(ctrl.instances['jailhost'].config)
    assert 'roles' not in config
    assert 'playbook' not in config
    assert has_playbook(ctrl.instances['jailhost'])
예제 #3
0
def test_augment_ezjail_master_playbook_implicit(ctrl, ployconf, tempdir):
    from ploy_ansible import has_playbook
    jailhost_yml = tempdir['jailhost.yml']
    jailhost_yml.fill('')
    config = dict(ctrl.instances['jailhost'].config)
    assert 'roles' not in config
    assert 'playbook' not in config
    assert has_playbook(ctrl.instances['jailhost'])
예제 #4
0
def test_augment_ezjail_master_playbook_explicit(ctrl, ployconf, tempdir):
    from ploy_ansible import has_playbook
    ployconf.fill([
        '[ez-master:jailhost]',
        'playbook = blubber.yml'])
    config = dict(ctrl.instances['jailhost'].config)
    assert 'roles' not in config
    assert config['playbook'] == 'blubber.yml'
    assert has_playbook(ctrl.instances['jailhost'])
예제 #5
0
def augment_instance(instance):
    from ploy_ansible import get_playbooks_directory, has_playbook
    if not instance.master.sectiongroupname.startswith('ez-'):
        return
    if 'ansible_python_interpreter' not in instance.config:
        instance.config['ansible_python_interpreter'] = '/usr/local/bin/python2.7'
    if 'fabric-shell' not in instance.config:
        instance.config['fabric-shell'] = '/bin/sh -c'

    if 'fabfile' not in instance.config:
        playbooks_directory = get_playbooks_directory(instance.master.main_config)
        fabfile = path.join(playbooks_directory, instance.uid, 'fabfile.py')
        if path.exists(fabfile):
            instance.config['fabfile'] = fabfile

    if instance.master.instance is instance:
        # for hosts
        if 'fabfile' not in instance.config:
            bootstrap_type = instance.config.get('bootstrap', 'mfsbsd')
            fabfile = path.join(bsdploy_path, 'fabfile_%s.py' % bootstrap_type)
            instance.config['fabfile'] = fabfile
        if not path.exists(instance.config['fabfile']):
            log.error("The fabfile '%s' for instance '%s' doesn't exist." % (
                instance.config['fabfile'], instance.uid))
            sys.exit(1)
        if not has_playbook(instance):
            instance.config['roles'] = 'jails_host'
        if 'fingerprint' not in instance.config:
            host_defined_path = instance.config.get('bootstrap-files')
            ploy_conf_path = instance.master.main_config.path
            if host_defined_path is None:
                bootstrap_path = path.join(ploy_conf_path, '..', 'bootstrap-files')
            else:
                bootstrap_path = path.join(ploy_conf_path, host_defined_path)
            ssh_key = path.abspath(path.join(bootstrap_path, 'ssh_host_rsa_key.pub'))
            if path.exists(ssh_key):
                instance.config['fingerprint'] = ssh_key
    else:
        # for jails
        if 'startup_script' not in instance.config:
            instance.config['startup_script'] = path.join(
                bsdploy_path, 'startup-ansible-jail.sh')
        if 'flavour' not in instance.config:
            instance.config['flavour'] = 'bsdploy_base'
예제 #6
0
파일: __init__.py 프로젝트: johnko/bsdploy
def augment_instance(instance):
    from ploy_ansible import get_ansible_version, get_playbooks_directory
    from ploy_ansible import has_playbook
    from ploy.config import ConfigSection

    if get_ansible_version() < (1, 5):
        log.error("You have an Ansible version below 1.5.0, which isn't supported anymore.")
        sys.exit(1)

    main_config = instance.master.main_config

    # provide virtualbox specific convenience defaults:
    if instance.master.sectiongroupname == ('vb-instance'):

        # default values for virtualbox instance
        for key, value in virtualbox_instance_defaults.items():
            instance.config.setdefault(key, value)

        # default hostonly interface
        hostonlyif = main_config.setdefault('vb-hostonlyif', ConfigSection())
        vboxnet0 = hostonlyif.setdefault('vboxnet0', ConfigSection())
        for key, value in virtualbox_hostonlyif_defaults.items():
            vboxnet0.setdefault(key, value)

        # default dhcp server
        dhcpserver = main_config.setdefault('vb-dhcpserver', ConfigSection())
        vboxnet0 = dhcpserver.setdefault('vboxnet0', ConfigSection())
        for key, value in virtualbox_dhcpserver_defaults.items():
            vboxnet0.setdefault(key, value)

        # default virtual disk
        if 'vb-disk:defaultdisk' in instance.config.get('storage', {}):
            disks = main_config.setdefault('vb-disk', ConfigSection())
            defaultdisk = disks.setdefault('defaultdisk', ConfigSection())
            for key, value in virtualbox_bootdisk_defaults.items():
                defaultdisk.setdefault(key, value)

    if not instance.master.sectiongroupname.startswith('ioc-'):
        return

    for key, value in ioc_instance_defaults.items():
        instance.config.setdefault(key, value)

    if 'fabfile' not in instance.config:
        playbooks_directory = get_playbooks_directory(main_config)
        fabfile = path.join(playbooks_directory, instance.uid, 'fabfile.py')
        if path.exists(fabfile):
            instance.config['fabfile'] = fabfile

    if instance.master.instance is instance:
        # for hosts
        if 'fabfile' not in instance.config:
            bootstrap_type = instance.config.get('bootstrap', 'mfsbsd')
            fabfile = path.join(bsdploy_path, 'fabfile_%s.py' % bootstrap_type)
            instance.config['fabfile'] = fabfile
        if not path.exists(instance.config['fabfile']):
            log.error("The fabfile '%s' for instance '%s' doesn't exist." % (
                instance.config['fabfile'], instance.uid))
            sys.exit(1)
        if not has_playbook(instance):
            instance.config['roles'] = 'jails_host'
        if 'fingerprint' not in instance.config:
            host_defined_path = instance.config.get('bootstrap-files')
            ploy_conf_path = main_config.path
            if host_defined_path is None:
                bootstrap_path = path.join(ploy_conf_path, '..', 'bootstrap-files')
            else:
                bootstrap_path = path.join(ploy_conf_path, host_defined_path)
            ssh_key = path.abspath(path.join(bootstrap_path, 'ssh_host_rsa_key.pub'))
            if path.exists(ssh_key):
                instance.config['fingerprint'] = ssh_key
    else:
        # for jails
        instance.config.setdefault('startup_script', path.join(
            bsdploy_path, 'startup-ansible-jail.sh'))
        instance.config.setdefault('flavour', 'bsdploy_base')
예제 #7
0
def augment_instance(instance):
    from ploy_ansible import get_playbooks_directory, has_playbook
    from ploy.config import ConfigSection

    # provide virtualbox specific convenience defaults:
    if instance.master.sectiongroupname == ('vb-instance'):

        # default values for virtualbox instance
        for key, value in virtualbox_instance_defaults.items():
            instance.config.setdefault(key, value)

        # default hostonly interface
        if 'vb-hostonlyif' not in instance.master.main_config:
            instance.master.main_config['vb-hostonlyif'] = ConfigSection(
                vboxnet0=ConfigSection(virtualbox_hostonlyif_defaults))

        # default dhcp server
        if 'vb-dhcpserver' not in instance.master.main_config:
            instance.master.main_config['vb-dhcpserver'] = ConfigSection(
                vboxnet0=ConfigSection(virtualbox_dhcpserver_defaults))

        # default virtual disk
        if 'vb-disk:defaultdisk' in instance.config.get('storage', {}):
            try:
                instance.master.main_config['vb-disk']['defaultdisk']
            except KeyError:
                instance.master.main_config['vb-disk'] = ConfigSection(
                    defaultdisk=ConfigSection(virtualbox_bootdisk_defaults))

    if not instance.master.sectiongroupname.startswith('ez-'):
        return

    for key, value in ez_instance_defaults.items():
        instance.config.setdefault(key, value)

    if 'fabfile' not in instance.config:
        playbooks_directory = get_playbooks_directory(instance.master.main_config)
        fabfile = path.join(playbooks_directory, instance.uid, 'fabfile.py')
        if path.exists(fabfile):
            instance.config['fabfile'] = fabfile

    if instance.master.instance is instance:
        # for hosts
        if 'fabfile' not in instance.config:
            bootstrap_type = instance.config.get('bootstrap', 'mfsbsd')
            fabfile = path.join(bsdploy_path, 'fabfile_%s.py' % bootstrap_type)
            instance.config['fabfile'] = fabfile
        if not path.exists(instance.config['fabfile']):
            log.error("The fabfile '%s' for instance '%s' doesn't exist." % (
                instance.config['fabfile'], instance.uid))
            sys.exit(1)
        if not has_playbook(instance):
            instance.config['roles'] = 'jails_host'
        if 'fingerprint' not in instance.config:
            host_defined_path = instance.config.get('bootstrap-files')
            ploy_conf_path = instance.master.main_config.path
            if host_defined_path is None:
                bootstrap_path = path.join(ploy_conf_path, '..', 'bootstrap-files')
            else:
                bootstrap_path = path.join(ploy_conf_path, host_defined_path)
            ssh_key = path.abspath(path.join(bootstrap_path, 'ssh_host_rsa_key.pub'))
            if path.exists(ssh_key):
                instance.config['fingerprint'] = ssh_key
    else:
        # for jails
        instance.config.setdefault('startup_script', path.join(
            bsdploy_path, 'startup-ansible-jail.sh'))
        instance.config.setdefault('flavour', 'bsdploy_base')