14572c3153
This patch adjusts the nova-lxd deployment so that it works correctly with LXD3 and bionic. * Update the zuul job and project config to switch from xenial to bionic. * Change the variable lxd_storage_pool to always have a defined value in the role defaults. This variable represents the name of the LXD storage pool which is distinct from any names associated with underlying storage. LXD storage pools created with 'lxd init' are always called 'default'. * Switch the role test storage backend from dir to ZFS. nova-lxd is currently not working for the dir backend as it expects the storage subsystem to support quotas. * Due to limitiations in nova-lxd it is necessary to ensure that the LXD storage pool name and ZFS pool names are both set to 'default'. Closes-Bug: #1800837 Change-Id: If1e48bb2e789e13f20435da19907b5adb7c1ef1f
374 lines
13 KiB
Django/Jinja
374 lines
13 KiB
Django/Jinja
# {{ ansible_managed }}
|
|
|
|
[DEFAULT]
|
|
# Disable stderr logging
|
|
use_stderr = False
|
|
# Logs / State
|
|
debug = {{ debug }}
|
|
fatal_deprecations = {{ nova_fatal_deprecations }}
|
|
log_dir = {{ nova_log_dir }}
|
|
state_path = {{ nova_system_home_folder }}
|
|
rootwrap_config = /etc/nova/rootwrap.conf
|
|
service_down_time = 120
|
|
{% if nova_default_schedule_zone is defined %}
|
|
default_schedule_zone = {{ nova_default_schedule_zone }}
|
|
{% endif %}
|
|
|
|
# Scheduler
|
|
cpu_allocation_ratio = {{ nova_cpu_allocation_ratio }}
|
|
disk_allocation_ratio = {{ nova_disk_allocation_ratio }}
|
|
ram_allocation_ratio = {{ nova_ram_allocation_ratio }}
|
|
reserved_host_disk_mb = {{ nova_reserved_host_disk_mb }}
|
|
reserved_host_memory_mb = {{ nova_reserved_host_memory_mb }}
|
|
|
|
# Compute
|
|
compute_driver = {{ nova_compute_driver }}
|
|
instance_name_template = instance-%08x
|
|
instances_path = {{ nova_system_home_folder }}/instances
|
|
allow_resize_to_same_host = True
|
|
image_cache_manager_interval = {{ nova_image_cache_manager_interval }}
|
|
resume_guests_state_on_host_boot = {{ nova_resume_guests_state_on_host_boot }}
|
|
|
|
{% if nova_console_user_ssl_cert is defined and nova_console_user_ssl_key is defined and ( nova_services['nova-novncproxy']['group'] in group_names or nova_services['nova-spicehtml5proxy']['group'] in group_names or nova_services['nova-serialconsole-proxy']['group'] in group_names ) %}
|
|
# Console SSL keys
|
|
ssl_only = true
|
|
cert = {{ nova_console_ssl_cert }}
|
|
key = {{ nova_console_ssl_key }}
|
|
{% endif %}
|
|
|
|
# Api's
|
|
enabled_apis = {{ nova_enabled_apis }}
|
|
osapi_compute_workers = {{ nova_osapi_compute_workers | default(nova_api_threads) }}
|
|
|
|
# Rpc all
|
|
transport_url = {{ nova_oslomsg_rpc_transport }}://{% for host in nova_oslomsg_rpc_servers.split(',') %}{{ nova_oslomsg_rpc_userid }}:{{ nova_oslomsg_rpc_password }}@{{ host }}:{{ nova_oslomsg_rpc_port }}{% if not loop.last %},{% else %}/{{ nova_oslomsg_rpc_vhost }}{% if nova_oslomsg_rpc_use_ssl | bool %}?ssl=1{% else %}?ssl=0{% endif %}{% endif %}{% endfor %}
|
|
|
|
executor_thread_pool_size = {{ nova_rpc_thread_pool_size }}
|
|
rpc_response_timeout = {{ nova_rpc_response_timeout }}
|
|
|
|
# Metadata
|
|
metadata_workers = {{ nova_metadata_workers | default(nova_api_threads) }}
|
|
|
|
# Network
|
|
my_ip = {% if nova_management_address == 'localhost' %}127.0.0.1{% else %}{{ nova_management_address }}{% endif %}
|
|
|
|
## Vif
|
|
{% if nova_virt_type in ['kvm', 'lxd', 'qemu', 'xen'] %}
|
|
libvirt_vif_type = ethernet
|
|
{% endif %}
|
|
vif_plugging_timeout = 10
|
|
vif_plugging_is_fatal = False
|
|
|
|
# Hypervisor
|
|
default_ephemeral_format = ext4
|
|
|
|
{% if nova_virt_type == 'powervm' %}
|
|
injected_network_template = /etc/nova/nova-interfaces-template
|
|
{% endif %}
|
|
|
|
# Configdrive
|
|
force_config_drive = {{ nova_force_config_drive }}
|
|
|
|
# Ceilometer notification configurations
|
|
{% if nova_ceilometer_enabled %}
|
|
instance_usage_audit = True
|
|
instance_usage_audit_period = hour
|
|
notify_on_state_change = vm_and_task_state
|
|
{% endif %}
|
|
|
|
# Notifications
|
|
{% if nova_ceilometer_enabled or nova_designate_enabled %}
|
|
[oslo_messaging_notifications]
|
|
{% set notification_topics = [] %}
|
|
{% if neutron_ceilometer_enabled %}
|
|
{% set _ = notification_topics.append('notifications') %}
|
|
{% endif %}
|
|
{% if neutron_designate_enabled %}
|
|
{% set _ = notification_topics.append(nova_notifications_designate) %}
|
|
{% endif %}
|
|
notification_topics = {{ notification_topics | join(',') }}
|
|
driver = messagingv2
|
|
transport_url = {{ nova_oslomsg_notify_transport }}://{% for host in nova_oslomsg_notify_servers.split(',') %}{{ nova_oslomsg_notify_userid }}:{{ nova_oslomsg_notify_password }}@{{ host }}:{{ nova_oslomsg_notify_port }}{% if not loop.last %},{% else %}/{{ nova_oslomsg_notify_vhost }}{% if nova_oslomsg_notify_use_ssl | bool %}?ssl=1{% else %}?ssl=0{% endif %}{% endif %}{% endfor %}
|
|
{% endif %}
|
|
|
|
# Cache
|
|
[cache]
|
|
enabled = true
|
|
backend = oslo_cache.memcache_pool
|
|
memcache_servers = {{ memcached_servers }}
|
|
|
|
|
|
# Cinder
|
|
[cinder]
|
|
catalog_info = volumev3:cinderv3:internalURL
|
|
cross_az_attach = {{ nova_cross_az_attach }}
|
|
os_region_name = {{ nova_service_region }}
|
|
|
|
{% if nova_console_type == 'spice' %}
|
|
[spice]
|
|
agent_enabled = {{ nova_console_agent_enabled }}
|
|
enabled = {{ nova_console_agent_enabled }}
|
|
# Console Url and binds
|
|
html5proxy_base_url = {{ nova_spice_html5proxy_base_url }}
|
|
server_listen = {% if nova_management_address == 'localhost' %}127.0.0.1{% else %}{{ nova_management_address }}{% endif %}
|
|
|
|
server_proxyclient_address = {% if nova_management_address == 'localhost' %}127.0.0.1{% else %}{{ nova_management_address }}{% endif %}
|
|
|
|
|
|
[vnc]
|
|
enabled = False
|
|
|
|
{% elif nova_console_type == 'novnc' %}
|
|
[vnc]
|
|
enabled = {{ nova_novncproxy_agent_enabled }}
|
|
novncproxy_base_url = {{ nova_novncproxy_base_url }}
|
|
server_listen = {{ nova_novncproxy_vncserver_listen }}
|
|
server_proxyclient_address = {{ nova_novncproxy_vncserver_proxyclient_address }}
|
|
|
|
{% elif nova_console_type == 'serialconsole' %}
|
|
[serial_console]
|
|
enabled = {{ nova_serialconsoleproxy_enabled }}
|
|
# Console Url and binds
|
|
base_url= {{ nova_serialconsoleproxy_base_url }}
|
|
proxyclient_address = {% if nova_management_address == 'localhost' %}127.0.0.1{% else %}{{ nova_management_address }}{% endif %}
|
|
port_range = {{ nova_serialconsoleproxy_port_range }}
|
|
{% if nova_services['nova-serialconsole-proxy']['group'] %}
|
|
serialproxy_host= {{ nova_serialconsoleproxy_serialconsole_proxyserver_proxyclient_address }}
|
|
serialproxy_port= {{ nova_serialconsoleproxy_port }}
|
|
{% endif %}
|
|
|
|
[vnc]
|
|
enabled = False
|
|
|
|
{% endif %}
|
|
|
|
# Glance
|
|
[glance]
|
|
api_servers = {{ nova_glance_api_servers }}
|
|
insecure = {{ keystone_service_internaluri_insecure | bool }}
|
|
|
|
# Neutron
|
|
[neutron]
|
|
region_name = {{ neutron_service_region }}
|
|
auth_type = password
|
|
default_floating_pool = public
|
|
# Keystone client plugin password option
|
|
password = {{ neutron_service_password }}
|
|
# Keystone client plugin username option
|
|
username = {{ neutron_service_user_name }}
|
|
project_name = {{ neutron_service_project_name }}
|
|
user_domain_name = {{ neutron_service_domain_name |default("Default") }}
|
|
project_domain_name = {{ neutron_service_domain_name |default("Default") }}
|
|
# Keystone client plugin authentication URL option
|
|
auth_url = {{ keystone_service_adminurl }}
|
|
insecure = {{ keystone_service_adminuri_insecure | bool }}
|
|
metadata_proxy_shared_secret = {{ nova_metadata_proxy_secret }}
|
|
service_metadata_proxy = {{ nova_metadata_proxy_enabled }}
|
|
{% if nova_network_services[nova_network_type]['ovs_bridge'] is defined %}
|
|
ovs_bridge = {{ nova_network_services[nova_network_type]['ovs_bridge'] }}
|
|
{% endif %}
|
|
|
|
{% if nova_placement_service_enabled | bool %}
|
|
# Placement
|
|
[placement]
|
|
region_name = {{ nova_placement_service_region }}
|
|
valid_interfaces = {{ nova_placement_service_interface }}
|
|
auth_type = "password"
|
|
password = {{ nova_placement_service_password }}
|
|
username = {{ nova_placement_service_username }}
|
|
project_name = {{ nova_placement_service_project_name }}
|
|
user_domain_name = {{ nova_placement_service_user_domain_id }}
|
|
project_domain_name = {{ nova_placement_service_project_domain_id }}
|
|
auth_url = {{ keystone_service_adminurl }}
|
|
insecure = {{ keystone_service_adminuri_insecure | bool }}
|
|
{% endif %}
|
|
|
|
[conductor]
|
|
workers = {{ nova_conductor_workers | default(nova_api_threads) }}
|
|
|
|
|
|
[keystone_authtoken]
|
|
insecure = {{ keystone_service_internaluri_insecure | bool }}
|
|
auth_type = {{ nova_keystone_auth_plugin }}
|
|
auth_url = {{ keystone_service_adminuri }}
|
|
www_authenticate_uri = {{ keystone_service_internaluri }}
|
|
project_domain_id = {{ nova_service_project_domain_id }}
|
|
user_domain_id = {{ nova_service_user_domain_id }}
|
|
project_name = {{ nova_service_project_name }}
|
|
username = {{ nova_service_user_name }}
|
|
password = {{ nova_service_password }}
|
|
region_name = {{ keystone_service_region }}
|
|
|
|
memcached_servers = {{ memcached_servers }}
|
|
|
|
token_cache_time = 300
|
|
|
|
# if your memcached server is shared, use these settings to avoid cache poisoning
|
|
memcache_security_strategy = ENCRYPT
|
|
memcache_secret_key = {{ memcached_encryption_key }}
|
|
|
|
{% if group_names | intersect(nova_services.keys() | difference('nova-compute') | map('extract', nova_services, 'group') | list) | count > 0 %}
|
|
[database]
|
|
connection = mysql+pymysql://{{ nova_galera_user }}:{{ nova_container_mysql_password }}@{{ nova_galera_address }}/{{ nova_galera_database }}?charset=utf8{% if nova_galera_use_ssl | bool %}&ssl_ca={{ nova_galera_ssl_ca_cert }}{% endif %}
|
|
|
|
max_overflow = {{ nova_db_max_overflow }}
|
|
max_pool_size = {{ nova_db_max_pool_size }}
|
|
pool_timeout = {{ nova_db_pool_timeout }}
|
|
|
|
|
|
[api_database]
|
|
connection = mysql+pymysql://{{ nova_api_galera_user }}:{{ nova_api_container_mysql_password }}@{{ nova_api_galera_address }}/{{ nova_api_galera_database }}?charset=utf8{% if nova_galera_use_ssl | bool %}&ssl_ca={{ nova_galera_ssl_ca_cert }}{% endif %}
|
|
|
|
max_overflow = {{ nova_api_db_max_overflow }}
|
|
max_pool_size = {{ nova_api_db_max_pool_size }}
|
|
pool_timeout = {{ nova_api_db_pool_timeout }}
|
|
|
|
{% endif %}
|
|
|
|
[oslo_concurrency]
|
|
lock_path = {{ nova_lock_path }}
|
|
|
|
|
|
[oslo_messaging_rabbit]
|
|
ssl = {{ nova_oslomsg_rpc_use_ssl }}
|
|
rpc_conn_pool_size = {{ nova_rpc_conn_pool_size }}
|
|
|
|
|
|
{% if nova_virt_type == 'ironic' %}
|
|
[ironic]
|
|
username = {{ ironic_service_user_name }}
|
|
password = {{ ironic_service_password }}
|
|
project_name = {{ ironic_service_project_name }}
|
|
user_domain_name = {{ ironic_service_domain_name | default("Default") }}
|
|
project_domain_name = {{ ironic_service_domain_name | default("Default") }}
|
|
auth_url = {{ keystone_service_adminurl }}
|
|
insecure = {{ keystone_service_adminuri_insecure | bool }}
|
|
api_endpoint = {{ ironic_service_adminurl }}
|
|
auth_type = {{ ironic_keystone_auth_plugin }}
|
|
|
|
{% endif %}
|
|
|
|
{% if nova_virt_type in ['kvm', 'qemu', 'xen'] %}
|
|
[libvirt]
|
|
inject_partition = {{ nova_libvirt_inject_partition }}
|
|
inject_password = {{ nova_libvirt_inject_password }}
|
|
inject_key = {{ nova_libvirt_inject_key }}
|
|
use_virtio_for_bridges = True
|
|
virt_type = {{ nova_virt_type }}
|
|
remove_unused_resized_minimum_age_seconds = {{ nova_remove_unused_resized_minimum_age_seconds }}
|
|
{% if nova_cpu_mode is defined %}
|
|
cpu_mode = {{ nova_cpu_mode }}
|
|
{% if nova_cpu_mode == 'custom' %}
|
|
cpu_model = {{ nova_cpu_model }}
|
|
{% endif %}
|
|
{% if nova_cpu_model_extra_flags is defined %}
|
|
cpu_model_extra_flags = {{ nova_cpu_model_extra_flags | join(',') }}
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
{% if nova_libvirt_images_rbd_pool is defined %}
|
|
# ceph rbd support
|
|
rbd_user = {{ nova_ceph_client }}
|
|
rbd_secret_uuid = {{ nova_ceph_client_uuid }}
|
|
images_type = rbd
|
|
images_rbd_pool = {{ nova_libvirt_images_rbd_pool }}
|
|
images_rbd_ceph_conf = /etc/ceph/ceph.conf
|
|
{% endif %}
|
|
live_migration_uri = "qemu+ssh://nova@%s/system?no_verify=1&keyfile={{ nova_system_home_folder }}/.ssh/id_rsa"
|
|
live_migration_tunnelled = True
|
|
hw_disk_discard = {{ nova_libvirt_hw_disk_discard }}
|
|
disk_cachemodes = {{ nova_libvirt_disk_cachemodes }}
|
|
{% endif %}
|
|
|
|
{% if nova_virt_type == 'lxd' %}
|
|
[lxd]
|
|
pool= {{ lxd_storage_pool }}
|
|
{% endif %}
|
|
|
|
{% if nova_barbican_enabled %}
|
|
[barbican]
|
|
auth_endpoint = {{ keystone_service_internaluri }}/v3
|
|
|
|
[key_manager]
|
|
backend = barbican
|
|
region_name = {{ nova_placement_service_region }}
|
|
auth_type = "password"
|
|
password = {{ nova_placement_service_password }}
|
|
username = {{ nova_placement_service_username }}
|
|
project_name = {{ nova_placement_service_project_name }}
|
|
user_domain_name = {{ nova_placement_service_user_domain_id }}
|
|
project_domain_name = {{ nova_placement_service_project_domain_id }}
|
|
auth_url = {{ keystone_service_adminurl }}
|
|
insecure = {{ keystone_service_adminuri_insecure | bool }}
|
|
{% endif %}
|
|
|
|
{% if nova_pci_passthrough_whitelist %}
|
|
# PCI Passthrough
|
|
[pci]
|
|
passthrough_whitelist = "{{ nova_pci_passthrough_whitelist }}"
|
|
{% endif %}
|
|
|
|
[wsgi]
|
|
api_paste_config = /etc/nova/api-paste.ini
|
|
{% if nova_external_ssl | bool %}
|
|
secure_proxy_ssl_header = {{ nova_secure_proxy_ssl_header }}
|
|
{% endif %}
|
|
|
|
[api]
|
|
auth_strategy = keystone
|
|
enable_instance_password = {{ nova_enable_instance_password }}
|
|
use_forwarded_for = {{ nova_network_services[nova_network_type]['use_forwarded_for'] | bool }}
|
|
vendordata_jsonfile_path = /etc/nova/vendor_data.json
|
|
|
|
[scheduler]
|
|
workers = {{ nova_scheduler_workers | default(nova_api_threads) }}
|
|
max_attempts = {{ nova_scheduler_max_attempts }}
|
|
scheduler_driver = {{ nova_scheduler_driver }}
|
|
periodic_task_interval = {{ nova_scheduler_driver_task_period }}
|
|
discover_hosts_in_cells_interval = {{ nova_discover_hosts_in_cells_interval }}
|
|
|
|
[filter_scheduler]
|
|
max_instances_per_host = {{ nova_max_instances_per_host }}
|
|
max_io_ops_per_host = {{ nova_max_io_ops_per_host }}
|
|
ram_weight_multiplier = {{ nova_ram_weight_multiplier }}
|
|
available_filters = {{ nova_scheduler_available_filters }}
|
|
enabled_filters = {{ nova_scheduler_default_filters }}
|
|
host_subset_size = {{ nova_scheduler_host_subset_size }}
|
|
weight_classes = {{ nova_scheduler_weight_classes }}
|
|
tracks_instance_changes = {{ nova_scheduler_tracks_instance_changes }}
|
|
|
|
[quota]
|
|
cores = {{ nova_quota_cores }}
|
|
injected_file_content_bytes = {{ nova_quota_injected_file_content_bytes }}
|
|
injected_file_path_length = {{ nova_quota_injected_file_path_length }}
|
|
injected_files = {{ nova_quota_injected_files }}
|
|
instances = {{ nova_quota_instances }}
|
|
key_pairs = {{ nova_quota_key_pairs }}
|
|
max_age = {{ nova_max_age }}
|
|
metadata_items = {{ nova_quota_metadata_items }}
|
|
ram = {{ nova_quota_ram }}
|
|
server_group_members = {{ nova_quota_server_group_members }}
|
|
server_groups = {{ nova_quota_server_groups }}
|
|
|
|
[upgrade_levels]
|
|
compute=auto
|
|
|
|
{% if enabled_vgpu_types is defined %}
|
|
[devices]
|
|
enabled_vgpu_types = {{ enabled_vgpu_types | join(',') }}
|
|
{% endif %}
|
|
|
|
{% if nova_pci_passthrough_whitelist or nova_pci_alias %}
|
|
[pci]
|
|
{% if nova_pci_passthrough_whitelist %}
|
|
# White list of PCI devices available to VMs.
|
|
passthrough_whitelist = "{{ nova_pci_passthrough_whitelist }}"
|
|
{% endif %}
|
|
{% if nova_pci_alias %}
|
|
# PCI Alias
|
|
{% for item in nova_pci_alias %}
|
|
alias = "{{item}}"
|
|
{% endfor %}
|
|
{% endif %}
|
|
{% endif %}
|