{%- from "nova/map.jinja" import compute with context %}

[DEFAULT]
logdir=/var/log/nova
state_path=/var/lib/nova
connection_type=libvirt
rootwrap_config=/etc/nova/rootwrap.conf
verbose=True
api_paste_config=/etc/nova/api-paste.ini
volumes_path=/var/lib/nova/volumes
compute_manager=nova.compute.manager.ComputeManager
network_device_mtu=65000
use_neutron = True
config_drive_format={{ compute.get('config_drive_format', compute.get('config_drive', {}).get('format', 'vfat')) }}
force_config_drive={{ compute.get('config_drive', {}).get('forced', True)|lower }}
config_drive_inject_password={{ compute.get('config_drive', {}).get('inject_password', False)|lower }}
security_group_api=neutron
vif_plugging_is_fatal=True
vif_plugging_timeout=300
dhcp_domain={{ compute.get('dhcp_domain', 'novalocal') }}
{%- if compute.get('sriov', false) %}
{%- for nic_name, sriov in compute.sriov.iteritems() %}
pci_passthrough_whitelist = {"devname":"{{ sriov.devname }}","physical_network":"{{ sriov.physical_network }}"}
{%- endfor %}
{%- endif %}
{%- if compute.image.use_cow is defined %}
use_cow_images = {{ compute.image.use_cow }}
{%- endif %}
force_raw_images={{ compute.get('image', {}).get('force_raw', True)|lower }}
{%- if compute.my_ip is defined %}
my_ip={{ compute.my_ip }}
{%- endif %}
{%- if compute.host is defined %}
host={{ compute.host }}
{%- endif %}

{%- if compute.ram_allocation_ratio is defined %}
ram_allocation_ratio = {{ compute.ram_allocation_ratio }}
{%- endif %}

{%- if compute.cpu_allocation_ratio is defined %}
cpu_allocation_ratio = {{ compute.cpu_allocation_ratio }}
{%- endif %}

remove_unused_original_minimum_age_seconds=86400
image_service=nova.image.glance.GlanceImageService

reserved_host_memory_mb = {{ compute.get('reserved_host_memory_mb', '512') }}

{%- if compute.max_concurrent_live_migrations is defined %}
max_concurrent_live_migrations = {{ compute.max_concurrent_live_migrations }}
{%- endif %}

{%- if compute.vcpu_pin_set is defined %}
vcpu_pin_set={{ compute.vcpu_pin_set }}
{%- endif %}

allow_resize_to_same_host=True

auth_strategy = keystone

neutron_url_timeout = 300
compute_driver = nova.virt.libvirt.LibvirtDriver

heal_instance_info_cache_interval = {{ compute.heal_instance_info_cache_interval }}

image_cache_manager_interval = 0
firewall_driver = nova.virt.firewall.NoopFirewallDriver

rpc_cast_timeout = 30
{%- if compute.message_queue.rpc_response_timeout is defined %}
rpc_response_timeout = {{ compute.message_queue.rpc_response_timeout }}
{%- endif %}
executor_thread_pool_size = 70
report_interval = {{ compute.get('report_interval', '60') }}

block_device_allocate_retries={{ compute.get('block_device_allocate_retries', '600') }}
block_device_allocate_retries_interval={{ compute.get('block_device_allocate_retries_interval', '10') }}

resume_guests_state_on_host_boot = {{ compute.get('resume_guests_state_on_host_boot', True) }}
service_down_time = 90

{% if pillar.ceilometer is defined %}
instance_usage_audit = True
instance_usage_audit_period = hour
{%- endif %}

instances_path = {{ compute.instances_path }}

{%- if compute.get('notification', {}).notify_on is defined %}
{%- for key, value in compute.notification.notify_on.iteritems() %}
notify_on_{{ key }} = {{ value }}
{%- endfor %}
{%- elif pillar.ceilometer is defined %}
notify_on_state_change = vm_and_task_state
{%- endif %}

[oslo_concurrency]
lock_path = /var/lib/nova/tmp

[oslo_messaging_notifications]
{%- if compute.notification is mapping %}
driver = {{ compute.notification.get('driver', 'messagingv2') }}
{%- if compute.notification.topics is defined %}
topics = {{ compute.notification.topics }}
{%- endif %}
{%- elif compute.notification %}
driver = messagingv2
{%- endif %}

[vnc]
enabled = true
novncproxy_base_url={{ compute.vncproxy_url }}/vnc_auto.html
novncproxy_port={{ compute.bind.vnc_port }}
{%- if compute.bind.vnc_address is defined %}
vncserver_listen={{ compute.bind.vnc_address }}
{%- else %}
vncserver_listen=0.0.0.0
{%- endif %}
vncserver_proxyclient_address={{ compute.bind.vnc_address }}
keymap = {{ compute.get('vnc_keymap', 'en-us') }}

[spice]
enabled = false
html5proxy_base_url = {{ compute.vncproxy_url }}/spice_auto.html

[cache]
{%- if compute.cache is defined %}
backend = oslo_cache.memcache_pool
enabled = true
memcache_servers={%- for member in compute.cache.members %}{{ member.host }}:11211{% if not loop.last %},{% endif %}{%- endfor %}
{%- endif %}

[libvirt]
cpu_mode = {{ compute.get('cpu_mode', 'host-passthrough') }}
{%- if compute.libvirt.virt_type is defined %}
virt_type = {{ compute.libvirt.virt_type }}
{%-  else %}
virt_type = kvm
{%- endif%}

inject_partition={{ compute.libvirt.inject_partition }}
{%- if compute.libvirt.get('inject_partition', '-2')|string == '-2' %}
inject_password=False
{%- else %}
inject_password={{ compute.libvirt.inject_password }}
{%- endif %}

disk_cachemodes="{{ compute.get('disk_cachemodes', 'network=writeback,block=none') }}"
libvirt_inject_password=True
block_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_NON_SHARED_INC
live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST
{%- if compute.libvirt.migration_inbound_addr is defined %}
live_migration_inbound_addr = {{ compute.libvirt.migration_inbound_addr }}
{%- endif %}
libvirt_inject_key=True
inject_key=False
vif_driver=nova.virt.libvirt.vif.LibvirtGenericVIFDriver

{%- if compute.get('ceph', {}).ephemeral is defined %}
images_type=rbd
images_rbd_pool={{ compute.ceph.rbd_pool }}
images_rbd_ceph_conf=/etc/ceph/ceph.conf
rbd_user={{ compute.ceph.rbd_user }}
rbd_secret_uuid={{ compute.ceph.secret_uuid }}
libvirt_inject_password=false
libvirt_inject_key=false
{%- elif compute.get('lvm', {}).ephemeral is defined %}
images_type=lvm
images_volume_group={{ compute.lvm.images_volume_group }}
{%- if compute.lvm.volume_clear is defined %}
volume_clear={{ compute.lvm.volume_clear }}
{%- endif %}
{%- if compute.lvm.volume_clear_size is defined %}
volume_clear_size={{ compute.lvm.volume_clear_size }}
{%- endif %}
{%- endif %}
{%- if compute.libvirt.hw_disk_discard is defined %}
hw_disk_discard={{ compute.libvirt.hw_disk_discard }}
{%- endif %}

{%- if compute.get('libvirt', {}).uri is defined %}
connection_uri={{ compute.libvirt.uri }}
{%- endif %}

[keystone_authtoken]
signing_dirname=/tmp/keystone-signing-nova
revocation_cache_time = 10
auth_type = password
user_domain_id = {{ compute.identity.get('domain', 'default') }}
project_domain_id = {{ compute.identity.get('domain', 'default') }}
project_name = {{ compute.identity.tenant }}
username = {{ compute.identity.user }}
password = {{ compute.identity.password }}
auth_uri=http://{{ compute.identity.host }}:5000
auth_url=http://{{ compute.identity.host }}:35357
{%- if compute.cache is defined %}
memcached_servers={%- for member in compute.cache.members %}{{ member.host }}:11211{% if not loop.last %},{% endif %}{%- endfor %}
{%- endif %}

{%- set rabbit_port = compute.message_queue.get('port', 5671 if compute.message_queue.get('ssl',{}).get('enabled', False) else 5672) %}

[oslo_messaging_rabbit]
{%- if compute.message_queue.members is defined %}
rabbit_hosts = {% for member in compute.message_queue.members -%}
                   {{ member.host }}:{{ member.get('port', rabbit_port) }}
                   {%- if not loop.last -%},{%- endif -%}
               {%- endfor -%}
{%- else %}
rabbit_host = {{ compute.message_queue.host }}
rabbit_port = {{ rabbit_port}}
{%- endif %}

rabbit_userid = {{ compute.message_queue.user }}
rabbit_password = {{ compute.message_queue.password }}
rabbit_virtual_host = {{ compute.message_queue.virtual_host }}
rpc_conn_pool_size = 300
rabbit_retry_interval = 1
rabbit_retry_backoff = 2

{# rabbitmq ssl configuration #}
{%- if compute.message_queue.get('ssl',{}).get('enabled', False) %}
[oslo_messaging_rabbit]
rabbit_use_ssl=true

{%- if compute.message_queue.ssl.version is defined %}
kombu_ssl_version = {{ compute.message_queue.ssl.version }}
{%- elif salt['grains.get']('pythonversion') > [2,7,8] %}
kombu_ssl_version = TLSv1_2
{%- endif %}

kombu_ssl_ca_certs = {{ compute.message_queue.ssl.get('cacert_file', compute.cacert_file) }}
{%- endif %}

[glance]
api_servers=http://{{ compute.image.host }}:9292

[neutron]
username={{ compute.network.user }}
password={{ compute.network.password }}
project_name={{ compute.identity.tenant }}
auth_url=http://{{ compute.identity.host }}:{{ compute.identity.port }}
url=http://{{ compute.network.host }}:{{ compute.network.port }}
region_name= {{ compute.network.region }}
extension_sync_interval={{ compute.network.get('extension_sync_interval', '600') }}
auth_type = password
project_domain_name = default
user_domain_name = default
timeout=30

[cinder]
os_region_name = {{ compute.identity.region }}
catalog_info=volumev2:cinderv2:internalURL
{%- if compute.cross_az_attach is defined %}
cross_az_attach={{ compute.cross_az_attach }}
{%- endif %}

{%- if compute.workaround is defined %}
[workarounds]
disable_libvirt_livesnapshot={{ compute.workaround.get('disable_libvirt_livesnapshot', True)|lower }}
{%- endif %}

{%- if compute.upgrade_levels is defined %}
[upgrade_levels]
{%- for key, value in compute.upgrade_levels.iteritems() %}
{{ key }}={{ value }}
{%- endfor %}
{%- endif %}

[hyperv]
config_drive_cdrom={{ compute.get('config_drive', {}).get('cdrom', False)|lower }}
