Exemple #1
0
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
Exemple #3
0
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
Exemple #5
0
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
Exemple #7
0
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
Exemple #8
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)
Exemple #9
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)
Exemple #10
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
Exemple #11
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
Exemple #13
0
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