def get_host_groups_from_cloud(inventory): groups = collections.defaultdict(list) firstpass = collections.defaultdict(list) hostvars = {} list_args = {} if hasattr(inventory, 'extra_config'): use_hostnames = inventory.extra_config['use_hostnames'] list_args['expand'] = inventory.extra_config['expand_hostvars'] else: use_hostnames = False for server in inventory.list_hosts(**list_args): if 'interface_ip' not in server: continue firstpass[server['name']].append(server) for name, servers in firstpass.items(): if len(servers) == 1 and use_hostnames: server = servers[0] hostvars[name] = dict(ansible_ssh_host=server['interface_ip'], openstack=server) for group in get_groups_from_server(server, namegroup=False): groups[group].append(server['name']) else: for server in servers: server_id = server['id'] hostvars[server_id] = dict( ansible_ssh_host=server['interface_ip'], openstack=server) for group in get_groups_from_server(server, namegroup=True): groups[group].append(server_id) groups['_meta'] = {'hostvars': hostvars} return groups
def get_host_groups_from_cloud(inventory): groups = collections.defaultdict(list) firstpass = collections.defaultdict(list) hostvars = {} list_args = {} if hasattr(inventory, 'extra_config'): use_hostnames = inventory.extra_config['use_hostnames'] list_args['expand'] = inventory.extra_config['expand_hostvars'] else: use_hostnames = False for server in inventory.list_hosts(**list_args): if 'interface_ip' not in server: continue firstpass[server['name']].append(server) for name, servers in firstpass.items(): if len(servers) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: server_ids = set() # Trap for duplicate results for server in servers: server_ids.add(server['id']) if len(server_ids) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: for server in servers: append_hostvars( hostvars, groups, server['id'], servers[0], namegroup=True) groups['_meta'] = {'hostvars': hostvars} return groups
def get_host_groups_from_cloud(inventory): groups = collections.defaultdict(list) firstpass = collections.defaultdict(list) hostvars = {} list_args = {} if hasattr(inventory, 'extra_config'): use_hostnames = inventory.extra_config['use_hostnames'] list_args['expand'] = inventory.extra_config['expand_hostvars'] else: use_hostnames = False for server in inventory.list_hosts(**list_args): if 'interface_ip' not in server: continue firstpass[server['name']].append(server) for name, servers in firstpass.items(): if len(servers) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: server_ids = set() # Trap for duplicate results for server in servers: server_ids.add(server['id']) if len(server_ids) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: for server in servers: append_hostvars( hostvars, groups, server['id'], server, namegroup=True) groups['_meta'] = {'hostvars': hostvars} return groups
def get_host_groups_from_cloud(inventory): groups = collections.defaultdict(list) firstpass = collections.defaultdict(list) hostvars = {} list_args = {} if hasattr(inventory, "extra_config"): use_hostnames = inventory.extra_config["use_hostnames"] list_args["expand"] = inventory.extra_config["expand_hostvars"] else: use_hostnames = False for server in inventory.list_hosts(**list_args): if "interface_ip" not in server: continue firstpass[server["name"]].append(server) for name, servers in firstpass.items(): if len(servers) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: server_ids = set() # Trap for duplicate results for server in servers: server_ids.add(server["id"]) if len(server_ids) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: for server in servers: append_hostvars(hostvars, groups, server["id"], server, namegroup=True) groups["_meta"] = {"hostvars": hostvars} return groups
def get_host_groups_from_cloud(inventory): groups = collections.defaultdict(list) firstpass = collections.defaultdict(list) hostvars = {} list_args = {} if hasattr(inventory, 'extra_config'): use_hostnames = inventory.extra_config['use_hostnames'] list_args['expand'] = inventory.extra_config['expand_hostvars'] else: use_hostnames = False for server in inventory.list_hosts(**list_args): if 'interface_ip' not in server: continue firstpass[server['name']].append(server) for name, servers in firstpass.items(): if len(servers) == 1 and use_hostnames: server = servers[0] hostvars[name] = dict( ansible_ssh_host=server['interface_ip'], openstack=server) for group in get_groups_from_server(server, namegroup=False): groups[group].append(server['name']) else: for server in servers: server_id = server['id'] hostvars[server_id] = dict( ansible_ssh_host=server['interface_ip'], openstack=server) for group in get_groups_from_server(server, namegroup=True): groups[group].append(server_id) groups['_meta'] = {'hostvars': hostvars} return groups
def get_host_groups_from_cloud(inventory): groups = collections.defaultdict(list) firstpass = collections.defaultdict(list) hostvars = {} list_args = {} if hasattr(inventory, 'extra_config'): use_hostnames = inventory.extra_config['use_hostnames'] list_args['expand'] = inventory.extra_config['expand_hostvars'] if StrictVersion(shade.__version__) >= StrictVersion("1.6.0"): list_args['fail_on_cloud_config'] = \ inventory.extra_config['fail_on_errors'] else: use_hostnames = False # Try to filter servers based on the CLUSTER_DOMAIN_NAME env cluster_domain_name = os.getenv('CLUSTER_DOMAIN_NAME', None) hosts = [] if cluster_domain_name: hosts = [ server for server in inventory.clouds[0].list_servers( filters={'name': cluster_domain_name}) if 'metadata' in server and (('cluster_id' in server.metadata) or ('group' in server.metadata)) ] else: hosts = inventory.list_hosts(**list_args) for server in hosts: if 'private_v4' not in server: continue firstpass[server['name']].append(server) for name, servers in firstpass.items(): if len(servers) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: server_ids = set() # Trap for duplicate results for server in servers: server_ids.add(server['id']) if len(server_ids) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: for server in servers: append_hostvars(hostvars, groups, server['id'], server, namegroup=True) groups['_meta'] = {'hostvars': hostvars} return groups
def get_host_groups_from_cloud(inventory): groups = collections.defaultdict(list) firstpass = collections.defaultdict(list) hostvars = {} list_args = {} if hasattr(inventory, 'extra_config'): use_hostnames = inventory.extra_config['use_hostnames'] list_args['expand'] = inventory.extra_config['expand_hostvars'] if StrictVersion(shade.__version__) >= StrictVersion("1.6.0"): list_args['fail_on_cloud_config'] = \ inventory.extra_config['fail_on_errors'] else: use_hostnames = False for server in inventory.list_hosts(**list_args): if 'interface_ip' not in server: continue try: # Attempt to filter based on some metadata we set in an environment variable if server["metadata"][os.environ[ 'OS_INV_FILTER_KEY']] == os.environ['OS_INV_FILTER_VALUE']: firstpass[server['name']].append(server) except: try: # Something went wrong, so let's just check whether filters are set. If they are then we will continue without appending the server os.environ['OS_INV_FILTER_KEY'] os.environ['OS_INV_FILTER_VALUE'] except: # Filters are not set, so we'll append everything we find firstpass[server['name']].append(server) for name, servers in firstpass.items(): if len(servers) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: server_ids = set() # Trap for duplicate results for server in servers: server_ids.add(server['id']) if len(server_ids) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: for server in servers: append_hostvars(hostvars, groups, server['id'], server, namegroup=True) groups['_meta'] = {'hostvars': hostvars} return groups
def main(): args = parse_args() try: shade.simple_logging(debug=args.debug) inventory = shade.inventory.OpenStackInventory( refresh=args.refresh, private=args.private) if args.list: output = inventory.list_hosts() elif args.host: output = inventory.get_host(args.host) print(output_format_dict(output, args.yaml)) except shade.OpenStackCloudException as e: sys.stderr.write(e.message + '\n') sys.exit(1) sys.exit(0)
def main(): args = parse_args() try: shade.simple_logging(debug=args.debug) inventory = shade.inventory.OpenStackInventory(refresh=args.refresh, private=args.private) if args.list: output = inventory.list_hosts() elif args.host: output = inventory.get_host(args.host) print(output_format_dict(output, args.yaml)) except shade.OpenStackCloudException as e: sys.stderr.write(e.message + '\n') sys.exit(1) sys.exit(0)
def get_host_groups_from_cloud(inventory): groups = collections.defaultdict(list) hostvars = {} for server in inventory.list_hosts(): if 'interface_ip' not in server: continue for group in get_groups_from_server(server): groups[group].append(server['id']) hostvars[server['id']] = dict( ansible_ssh_host=server['interface_ip'], openstack=server, ) groups['_meta'] = {'hostvars': hostvars} return groups
def get_host_groups_from_cloud(inventory): groups = collections.defaultdict(list) firstpass = collections.defaultdict(list) hostvars = {} list_args = {} if hasattr(inventory, 'extra_config'): use_hostnames = inventory.extra_config['use_hostnames'] list_args['expand'] = inventory.extra_config['expand_hostvars'] if StrictVersion(shade.__version__) >= StrictVersion("1.6.0"): list_args['fail_on_cloud_config'] = \ inventory.extra_config['fail_on_errors'] else: use_hostnames = False for server in inventory.list_hosts(**list_args): if 'interface_ip' not in server: continue firstpass[server['name']].append(server) for name, servers in firstpass.items(): if len(servers) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: server_ids = set() # Trap for duplicate results for server in servers: server_ids.add(server['id']) if len(server_ids) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: for server in servers: append_hostvars(hostvars, groups, server['id'], server, namegroup=True) auto_proxy = os.getenv('OS_PROXY_DISCOVER') # Default to using proxy auto-discovery #if auto_proxy and auto_proxy != '0': if not auto_proxy or auto_proxy != '0': update_ssh_proxy_host(hostvars) groups['_meta'] = {'hostvars': hostvars} return groups
def get_host_groups_from_cloud(inventory): groups = collections.defaultdict(list) firstpass = collections.defaultdict(list) hostvars = {} list_args = {} if hasattr(inventory, 'extra_config'): use_hostnames = inventory.extra_config['use_hostnames'] list_args['expand'] = inventory.extra_config['expand_hostvars'] if StrictVersion(shade.__version__) >= StrictVersion("1.6.0"): list_args['fail_on_cloud_config'] = \ inventory.extra_config['fail_on_errors'] else: use_hostnames = False for server in inventory.list_hosts(**list_args): if 'interface_ip' not in server: continue try: if server["metadata"][os.environ[ 'OS_INV_FILTER_KEY']] == os.environ['OS_INV_FILTER_VALUE']: firstpass[server['name']].append(server) except: firstpass[server['name']].append(server) for name, servers in firstpass.items(): if len(servers) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: server_ids = set() # Trap for duplicate results for server in servers: server_ids.add(server['id']) if len(server_ids) == 1 and use_hostnames: append_hostvars(hostvars, groups, name, servers[0]) else: for server in servers: append_hostvars(hostvars, groups, server['id'], server, namegroup=True) groups['_meta'] = {'hostvars': hostvars} return groups