Esempio n. 1
0
 def __init__(self, ctrl, vault_password=None):
     from ploy_ansible import get_playbooks_directory
     kwargs = dict(host_list=[])
     if vault_password is not None:
         kwargs['vault_password'] = vault_password
     BaseInventory.__init__(self, **kwargs)
     self.ctrl = ctrl
     self.set_playbook_basedir(get_playbooks_directory(ctrl.config))
     groups = {}
     groups['all'] = self.get_group('all')
     seen = set()
     for instance in self.ctrl.instances.values():
         if instance.uid in seen:
             continue
         seen.add(instance.uid)
         h = Host(instance.uid)
         add_to = ['all', '%ss' % instance.sectiongroupname]
         if hasattr(instance, 'master'):
             master = instance.master
             if instance == getattr(master, 'instance', None):
                 add_to.append('masters')
             else:
                 add_to.append('%s-instances' % master.id)
         for group in add_to:
             g = groups.get(group)
             if g is None:
                 g = self.get_group(group)
                 if g is None:
                     g = Group(group)
                     self.add_group(g)
                 groups[group] = g
             g.add_host(h)
     self._vars_plugins = [x for x in utils.plugins.vars_loader.all(self)]
Esempio n. 2
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'
Esempio n. 3
0
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')
Esempio n. 4
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')