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)]
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'
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')
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')