#!/bin/bash
#
# lib/nova_plugins/hypervisor-fake
# Configure the fake hypervisor

# Enable with:
# VIRT_DRIVER=fake

# Dependencies:
# ``functions`` file
# ``nova`` configuration

# install_nova_hypervisor - install any external requirements
# configure_nova_hypervisor - make configuration changes, including those to other services
# start_nova_hypervisor - start any external services
# stop_nova_hypervisor - stop any external services
# cleanup_nova_hypervisor - remove transient data and cache

# Save trace setting
_XTRACE_VIRTFAKE=$(set +o | grep xtrace)
set +o xtrace


# Defaults
# --------


# Entry Points
# ------------

# clean_nova_hypervisor - Clean up an installation
function cleanup_nova_hypervisor {
    # This function intentionally left blank
    :
}

# configure_nova_hypervisor - Set config files, create data dirs, etc
function configure_nova_hypervisor {
    iniset $NOVA_CONF DEFAULT compute_driver "fake.FakeDriver"
    # Disable arbitrary limits
    iniset $NOVA_CONF DEFAULT quota_instances -1
    iniset $NOVA_CONF DEFAULT quota_cores -1
    iniset $NOVA_CONF DEFAULT quota_ram -1
    iniset $NOVA_CONF DEFAULT quota_floating_ips -1
    iniset $NOVA_CONF DEFAULT quota_fixed_ips -1
    iniset $NOVA_CONF DEFAULT quota_metadata_items -1
    iniset $NOVA_CONF DEFAULT quota_injected_files -1
    iniset $NOVA_CONF DEFAULT quota_injected_file_path_length -1
    iniset $NOVA_CONF DEFAULT quota_security_groups -1
    iniset $NOVA_CONF DEFAULT quota_security_group_rules -1
    iniset $NOVA_CONF DEFAULT quota_key_pairs -1
    iniset $NOVA_CONF DEFAULT scheduler_default_filters "RetryFilter,AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,CoreFilter,RamFilter,DiskFilter"
}

# install_nova_hypervisor() - Install external components
function install_nova_hypervisor {
    # This function intentionally left blank
    :
}

# start_nova_hypervisor - Start any required external services
function start_nova_hypervisor {
    # This function intentionally left blank
    :
}

# stop_nova_hypervisor - Stop any external services
function stop_nova_hypervisor {
    # This function intentionally left blank
    :
}


# Restore xtrace
$_XTRACE_VIRTFAKE

# Local variables:
# mode: shell-script
# End:
