Puppet Class: nova

Inherits:
nova::params
Defined in:
manifests/init.pp

Overview

Class: nova

This class is used to specify configuration parameters that are common across all nova services.

Parameters:

ensure_package

(optional) The state of nova packages Defaults to ‘present’

default_transport_url

(optional) A URL representing the messaging driver to use and its full configuration. Transport URLs take the form:

transport://user:pass@host1:port[,hostN:portN]/virtual_host

Defaults to $::os_service_default

rpc_response_timeout

(Optional) Seconds to wait for a response from a call. (integer value) Defaults to $::os_service_default.

long_rpc_timeout

(Optional) An alternative timeout value for RPC calls that have the potential to take a long time. Defaults to $::os_service_default.

control_exchange

(Optional) The default exchange under which topics are scoped. May be overridden by an exchange name specified in the transport_url option. Defaults to $::os_service_default

rabbit_use_ssl

(optional) Boolean. Connect over SSL for RabbitMQ. (boolean value) Defaults to $::os_service_default

rabbit_ha_queues

(optional) Use HA queues in RabbitMQ. (boolean value) Defaults to $::os_service_default

rabbit_heartbeat_timeout_threshold

(optional) Number of seconds after which the RabbitMQ broker is considered down if the heartbeat keepalive fails. Any value >0 enables heartbeats. Heartbeating helps to ensure the TCP connection to RabbitMQ isn’t silently closed, resulting in missed or lost messages from the queue. Requires kombu >= 3.0.7 and amqp >= 1.4.0. (integer value) Defaults to $::os_service_default

rabbit_heartbeat_rate

(optional) How often during the rabbit_heartbeat_timeout_threshold period to check the heartbeat on RabbitMQ connection. i.e. rabbit_heartbeat_rate=2 when rabbit_heartbeat_timeout_threshold=60, the heartbeat will be checked every 30 seconds. (integer value) Defaults to $::os_service_default

rabbit_heartbeat_in_pthread

(Optional) EXPERIMENTAL: Run the health check heartbeat thread through a native python thread. By default if this option isn’t provided the health check heartbeat will inherit the execution model from the parent process. By example if the parent process have monkey patched the stdlib by using eventlet/greenlet then the heartbeat will be run through a green thread. Defaults to $::os_service_default

rabbit_retry_interval

(Optional) How frequently to retry connecting with RabbitMQ. (integer value) Defaults to $::os_service_default

kombu_ssl_ca_certs

(optional) SSL certification authority file (valid only if SSL enabled). (string value) Defaults to $::os_service_default

kombu_ssl_certfile

(optional) SSL cert file (valid only if SSL enabled). (string value) Defaults to $::os_service_default

kombu_ssl_keyfile

(optional) SSL key file (valid only if SSL enabled). (string value) Defaults to $::os_service_default

kombu_ssl_version

(optional) SSL version to use (valid only if SSL enabled). Valid values are TLSv1, SSLv23 and SSLv3. SSLv2 may be available on some distributions. (string value) Defaults to $::os_service_default

kombu_reconnect_delay

(optional) How long to wait before reconnecting in response to an AMQP consumer cancel notification. (floating point value) Defaults to $::os_service_default

kombu_failover_strategy

(Optional) Determines how the next RabbitMQ node is chosen in case the one we are currently connected to becomes unavailable. Takes effect only if more than one RabbitMQ node is provided in config. (string value) Defaults to $::os_service_default

kombu_compression

(optional) Possible values are: gzip, bz2. If not set compression will not be used. This option may not be available in future versions. EXPERIMENTAL. (string value) Defaults to $::os_service_default

amqp_durable_queues

(optional) Define queues as “durable” to rabbitmq. (boolean value) Defaults to $::os_service_default

amqp_server_request_prefix

(Optional) Address prefix used when sending to a specific server Defaults to $::os_service_default.

amqp_broadcast_prefix

(Optional) address prefix used when broadcasting to all servers Defaults to $::os_service_default.

amqp_group_request_prefix

(Optional) address prefix when sending to any server in group Defaults to $::os_service_default.

amqp_container_name

(Optional) Name for the AMQP container Defaults to $::os_service_default.

amqp_idle_timeout

(Optional) Timeout for inactive connections Defaults to $::os_service_default.

amqp_trace

(Optional) Debug: dump AMQP frames to stdout Defaults to $::os_service_default.

amqp_ssl_ca_file

(Optional) CA certificate PEM file to verify server certificate Defaults to $::os_service_default.

amqp_ssl_cert_file

(Optional) Identifying certificate PEM file to present to clients Defaults to $::os_service_default.

amqp_ssl_key_file

(Optional) Private key PEM file used to sign cert_file certificate Defaults to $::os_service_default.

amqp_ssl_key_password

(Optional) Password for decrypting ssl_key_file (if encrypted) Defaults to $::os_service_default.

amqp_sasl_mechanisms

(Optional) Space separated list of acceptable SASL mechanisms Defaults to $::os_service_default.

amqp_sasl_config_dir

(Optional) Path to directory that contains the SASL configuration Defaults to $::os_service_default.

amqp_sasl_config_name

(Optional) Name of configuration file (without .conf suffix) Defaults to $::os_service_default.

amqp_username

(Optional) User name for message broker authentication Defaults to $::os_service_default.

amqp_password

(Optional) Password for message broker authentication Defaults to $::os_service_default.

host

(Optional) Name of this node. This is typically a hostname, FQDN, or IP address. Defaults to $::os_service_default.

service_down_time

(optional) Maximum time since last check-in for up service. Defaults to 60

state_path

(optional) Directory for storing state. Defaults to ‘/var/lib/nova’

lock_path

(optional) Directory for lock files. On RHEL will be ‘/var/lib/nova/tmp’ and on Debian ‘/var/lock/nova’ Defaults to $::nova::params::lock_path

periodic_interval

(optional) Seconds between running periodic tasks. Defaults to ‘60’

report_interval

(optional) Interval at which nodes report to data store.

Defaults to '10'
rootwrap_config

(optional) Path to the rootwrap configuration file to use for running commands as root Defaults to ‘/etc/nova/rootwrap.conf’

use_ssl

(optional) Enable SSL on the API server Defaults to false, not set

enabled_ssl_apis

(optional) List of APIs to SSL enable Defaults to [] Possible values : ‘osapi_compute’, ‘metadata’

cert_file

(optional) Certificate file to use when starting API server securely Defaults to false, not set

key_file

(optional) Private key file to use when starting API server securely Defaults to false, not set

ca_file

(optional) CA certificate file to use to verify connecting clients Defaults to false, not set

nova_public_key

(optional) Install public key in .ssh/authorized_keys for the ‘nova’ user. Expects a hash of the form { type => ‘key-type’, key => ‘key-data’ } where ‘key-type’ is one of (ssh-rsa, ssh-dsa, ssh-ecdsa) and ‘key-data’ is the actual key data (e.g, ‘AAAA…’).

nova_private_key

(optional) Install private key into .ssh/id_rsa (or appropriate equivalent for key type). Expects a hash of the form { type => ‘key-type’, key => ‘key-data’ }, where ‘key-type’ is one of (ssh-rsa, ssh-dsa, ssh-ecdsa) and ‘key-data’ is the contents of the private key file.

ssl_only

(optional) Disallow non-encrypted connections. Defaults to false

cert

(optional) Path to SSL certificate file. Defaults to $::os_service_default

key

(optional) SSL key file (if separate from cert). Defaults to $::os_service_default

console_ssl_ciphers

(optional) OpenSSL cipher preference string that specifies what ciphers to allow for TLS connections from clients. See the man page for the OpenSSL ‘ciphers’ command for details of the cipher preference string format and allowed values. Defaults to $::os_service_default

console_ssl_minimum_version

(optional) Minimum allowed SSL/TLS protocol version. Valid values are ‘default’, ‘tlsv1_1’, ‘tlsv1_2’, and ‘tlsv1_3’. A value of ‘default’ will use the underlying system OpenSSL defaults. Defaults to $::os_service_default

notification_transport_url

(optional) A URL representing the messaging driver to use for notifications and its full configuration. Transport URLs take the form:

transport://user:pass@host1:port[,hostN:portN]/virtual_host

Defaults to $::os_service_default

notification_driver

(optional) Driver or drivers to handle sending notifications. Value can be a string or a list. Defaults to $::os_service_default.

notification_topics

(optional) AMQP topic used for OpenStack notifications Defaults to ::os_service_default

notification_format

(optional) Format used for OpenStack notifications Defaults to ::os_service_default

notify_on_state_change

(optional) If set, send compute.instance.update notifications on instance state changes. Valid values are None for no notifications, “vm_state” for notifications on VM state changes, or “vm_and_task_state” for notifications on VM and task state changes. Defaults to undef

ovsdb_connection

(optional) Sets the ovsdb connection string. This is used by os-vif to interact with openvswitch on the host. Defaults to $::os_service_default

upgrade_level_cells

(optional) Sets a version cap for messages sent to local cells services Defaults to $::os_service_default

upgrade_level_compute

(optional) Sets a version cap for messages sent to compute services Defaults to $::os_service_default

upgrade_level_conductor

(optional) Sets a version cap for messages sent to conductor services Defaults to $::os_service_default

upgrade_level_intercell

(optional) Sets a version cap for messages sent between cells services Defaults to $::os_service_default

upgrade_level_network

(optional) Sets a version cap for messages sent to network services Defaults to $::os_service_default

upgrade_level_scheduler

(optional) Sets a version cap for messages sent to scheduler services Defaults to $::os_service_default

purge_config

(optional) Whether to set only the specified config options in the nova config. Defaults to false.

cpu_allocation_ratio

(optional) Virtual CPU to physical CPU allocation ratio which affects all CPU filters. This can be set on the scheduler, or can be overridden per compute node. Defaults to $::os_service_default

ram_allocation_ratio

(optional) Virtual ram to physical ram allocation ratio which affects all ram filters. This can be set on the scheduler, or can be overridden per compute node. Defaults to $::os_service_default

disk_allocation_ratio

(optional) Virtual disk to physical disk allocation ratio which is used by the disk filter. This can be set on the scheduler, or can be overridden per compute node. Defaults to $::os_service_default

initial_cpu_allocation_ratio

(optional) Initial virtual CPU to physical CPU allocation ratio. Defaults to $::os_service_default

initial_ram_allocation_ratio

(optional) Initial virtual RAM to physical RAM allocation ratio. Defaults to $::os_service_default

initial_disk_allocation_ratio

(optional) Initial virtual disk to physical disk allocation ratio. Defaults to $::os_service_default

my_ip

(optional) IP address of this host on the management network. If unset, will determine the IP programmatically based on the default route. If unable to do so, will use “127.0.0.1”. Defaults to $::os_service_default.

dhcp_domain

(optional) domain to use for building the hostnames Defaults to $::os_service_default

instance_name_template

(optional) Template string to be used to generate instance names Defaults to undef

DEPRECATED PARAMETERS

auth_strategy

(optional) The strategy to use for auth: noauth or keystone. Defaults to undef

os_region_name

(optional) Sets the os_region_name flag. For environments with more than one endpoint per service, this is required to make things such as cinder volume attach work. If you don’t set this and you have multiple endpoints, you will get AmbiguousEndpoint exceptions in the nova API service. Defaults to undef

cinder_catalog_info

(optional) Info to match when looking for cinder in the service catalog. Format is: separated values of the form: <service_type>:<service_name>:<endpoint_type> Defaults to undef

cross_az_attach

(optional) Allow attach between instance and volume in different availability zones. Defaults to undef

upgrade_level_cert

(optional) Sets a version cap for messages sent to cert services Defaults to undef

Parameters:

  • ensure_package (Any) (defaults to: 'present')
  • default_transport_url (Any) (defaults to: $::os_service_default)
  • rpc_response_timeout (Any) (defaults to: $::os_service_default)
  • long_rpc_timeout (Any) (defaults to: $::os_service_default)
  • control_exchange (Any) (defaults to: $::os_service_default)
  • rabbit_use_ssl (Any) (defaults to: $::os_service_default)
  • rabbit_heartbeat_timeout_threshold (Any) (defaults to: $::os_service_default)
  • rabbit_heartbeat_rate (Any) (defaults to: $::os_service_default)
  • rabbit_heartbeat_in_pthread (Any) (defaults to: $::os_service_default)
  • rabbit_ha_queues (Any) (defaults to: $::os_service_default)
  • rabbit_retry_interval (Any) (defaults to: $::os_service_default)
  • kombu_ssl_ca_certs (Any) (defaults to: $::os_service_default)
  • kombu_ssl_certfile (Any) (defaults to: $::os_service_default)
  • kombu_ssl_keyfile (Any) (defaults to: $::os_service_default)
  • kombu_ssl_version (Any) (defaults to: $::os_service_default)
  • kombu_reconnect_delay (Any) (defaults to: $::os_service_default)
  • kombu_failover_strategy (Any) (defaults to: $::os_service_default)
  • kombu_compression (Any) (defaults to: $::os_service_default)
  • amqp_durable_queues (Any) (defaults to: $::os_service_default)
  • amqp_server_request_prefix (Any) (defaults to: $::os_service_default)
  • amqp_broadcast_prefix (Any) (defaults to: $::os_service_default)
  • amqp_group_request_prefix (Any) (defaults to: $::os_service_default)
  • amqp_container_name (Any) (defaults to: $::os_service_default)
  • amqp_idle_timeout (Any) (defaults to: $::os_service_default)
  • amqp_trace (Any) (defaults to: $::os_service_default)
  • amqp_ssl_ca_file (Any) (defaults to: $::os_service_default)
  • amqp_ssl_cert_file (Any) (defaults to: $::os_service_default)
  • amqp_ssl_key_file (Any) (defaults to: $::os_service_default)
  • amqp_ssl_key_password (Any) (defaults to: $::os_service_default)
  • amqp_sasl_mechanisms (Any) (defaults to: $::os_service_default)
  • amqp_sasl_config_dir (Any) (defaults to: $::os_service_default)
  • amqp_sasl_config_name (Any) (defaults to: $::os_service_default)
  • amqp_username (Any) (defaults to: $::os_service_default)
  • amqp_password (Any) (defaults to: $::os_service_default)
  • host (Any) (defaults to: $::os_service_default)
  • service_down_time (Any) (defaults to: 60)
  • state_path (Any) (defaults to: '/var/lib/nova')
  • lock_path (Any) (defaults to: $::nova::params::lock_path)
  • periodic_interval (Any) (defaults to: '60')
  • report_interval (Any) (defaults to: '10')
  • rootwrap_config (Any) (defaults to: '/etc/nova/rootwrap.conf')
  • use_ssl (Any) (defaults to: false)
  • enabled_ssl_apis (Any) (defaults to: ['metadata', 'osapi_compute'])
  • ca_file (Any) (defaults to: false)
  • cert_file (Any) (defaults to: false)
  • key_file (Any) (defaults to: false)
  • nova_public_key (Any) (defaults to: undef)
  • nova_private_key (Any) (defaults to: undef)
  • ssl_only (Any) (defaults to: false)
  • cert (Any) (defaults to: $::os_service_default)
  • key (Any) (defaults to: $::os_service_default)
  • console_ssl_ciphers (Any) (defaults to: $::os_service_default)
  • console_ssl_minimum_version (Any) (defaults to: $::os_service_default)
  • notification_transport_url (Any) (defaults to: $::os_service_default)
  • notification_driver (Any) (defaults to: $::os_service_default)
  • notification_topics (Any) (defaults to: $::os_service_default)
  • notification_format (Any) (defaults to: $::os_service_default)
  • notify_on_state_change (Any) (defaults to: undef)
  • ovsdb_connection (Any) (defaults to: $::os_service_default)
  • upgrade_level_cells (Any) (defaults to: $::os_service_default)
  • upgrade_level_compute (Any) (defaults to: $::os_service_default)
  • upgrade_level_conductor (Any) (defaults to: $::os_service_default)
  • upgrade_level_intercell (Any) (defaults to: $::os_service_default)
  • upgrade_level_network (Any) (defaults to: $::os_service_default)
  • upgrade_level_scheduler (Any) (defaults to: $::os_service_default)
  • cpu_allocation_ratio (Any) (defaults to: $::os_service_default)
  • ram_allocation_ratio (Any) (defaults to: $::os_service_default)
  • disk_allocation_ratio (Any) (defaults to: $::os_service_default)
  • initial_cpu_allocation_ratio (Any) (defaults to: $::os_service_default)
  • initial_ram_allocation_ratio (Any) (defaults to: $::os_service_default)
  • initial_disk_allocation_ratio (Any) (defaults to: $::os_service_default)
  • purge_config (Any) (defaults to: false)
  • my_ip (Any) (defaults to: $::os_service_default)
  • dhcp_domain (Any) (defaults to: $::os_service_default)
  • instance_name_template (Any) (defaults to: undef)
  • auth_strategy (Any) (defaults to: undef)
  • os_region_name (Any) (defaults to: undef)
  • cinder_catalog_info (Any) (defaults to: undef)
  • cross_az_attach (Any) (defaults to: undef)
  • upgrade_level_cert (Any) (defaults to: undef)


391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
# File 'manifests/init.pp', line 391

class nova(
  $ensure_package                         = 'present',
  $default_transport_url                  = $::os_service_default,
  $rpc_response_timeout                   = $::os_service_default,
  $long_rpc_timeout                       = $::os_service_default,
  $control_exchange                       = $::os_service_default,
  $rabbit_use_ssl                         = $::os_service_default,
  $rabbit_heartbeat_timeout_threshold     = $::os_service_default,
  $rabbit_heartbeat_rate                  = $::os_service_default,
  $rabbit_heartbeat_in_pthread            = $::os_service_default,
  $rabbit_ha_queues                       = $::os_service_default,
  $rabbit_retry_interval                  = $::os_service_default,
  $kombu_ssl_ca_certs                     = $::os_service_default,
  $kombu_ssl_certfile                     = $::os_service_default,
  $kombu_ssl_keyfile                      = $::os_service_default,
  $kombu_ssl_version                      = $::os_service_default,
  $kombu_reconnect_delay                  = $::os_service_default,
  $kombu_failover_strategy                = $::os_service_default,
  $kombu_compression                      = $::os_service_default,
  $amqp_durable_queues                    = $::os_service_default,
  $amqp_server_request_prefix             = $::os_service_default,
  $amqp_broadcast_prefix                  = $::os_service_default,
  $amqp_group_request_prefix              = $::os_service_default,
  $amqp_container_name                    = $::os_service_default,
  $amqp_idle_timeout                      = $::os_service_default,
  $amqp_trace                             = $::os_service_default,
  $amqp_ssl_ca_file                       = $::os_service_default,
  $amqp_ssl_cert_file                     = $::os_service_default,
  $amqp_ssl_key_file                      = $::os_service_default,
  $amqp_ssl_key_password                  = $::os_service_default,
  $amqp_sasl_mechanisms                   = $::os_service_default,
  $amqp_sasl_config_dir                   = $::os_service_default,
  $amqp_sasl_config_name                  = $::os_service_default,
  $amqp_username                          = $::os_service_default,
  $amqp_password                          = $::os_service_default,
  $host                                   = $::os_service_default,
  $service_down_time                      = 60,
  $state_path                             = '/var/lib/nova',
  $lock_path                              = $::nova::params::lock_path,
  $periodic_interval                      = '60',
  $report_interval                        = '10',
  $rootwrap_config                        = '/etc/nova/rootwrap.conf',
  $use_ssl                                = false,
  $enabled_ssl_apis                       = ['metadata', 'osapi_compute'],
  $ca_file                                = false,
  $cert_file                              = false,
  $key_file                               = false,
  $nova_public_key                        = undef,
  $nova_private_key                       = undef,
  $ssl_only                               = false,
  $cert                                   = $::os_service_default,
  $key                                    = $::os_service_default,
  $console_ssl_ciphers                    = $::os_service_default,
  $console_ssl_minimum_version            = $::os_service_default,
  $notification_transport_url             = $::os_service_default,
  $notification_driver                    = $::os_service_default,
  $notification_topics                    = $::os_service_default,
  $notification_format                    = $::os_service_default,
  $notify_on_state_change                 = undef,
  $ovsdb_connection                       = $::os_service_default,
  $upgrade_level_cells                    = $::os_service_default,
  $upgrade_level_compute                  = $::os_service_default,
  $upgrade_level_conductor                = $::os_service_default,
  $upgrade_level_intercell                = $::os_service_default,
  $upgrade_level_network                  = $::os_service_default,
  $upgrade_level_scheduler                = $::os_service_default,
  $cpu_allocation_ratio                   = $::os_service_default,
  $ram_allocation_ratio                   = $::os_service_default,
  $disk_allocation_ratio                  = $::os_service_default,
  $initial_cpu_allocation_ratio           = $::os_service_default,
  $initial_ram_allocation_ratio           = $::os_service_default,
  $initial_disk_allocation_ratio          = $::os_service_default,
  $purge_config                           = false,
  $my_ip                                  = $::os_service_default,
  $dhcp_domain                            = $::os_service_default,
  $instance_name_template                 = undef,
  # DEPRECATED PARAMETERS
  $auth_strategy                          = undef,
  $os_region_name                         = undef,
  $cinder_catalog_info                    = undef,
  $cross_az_attach                        = undef,
  $upgrade_level_cert                     = undef,
) inherits nova::params {

  include nova::deps
  include nova::workarounds

  validate_legacy(Array, 'validate_array', $enabled_ssl_apis)
  if empty($enabled_ssl_apis) and $use_ssl {
      warning('enabled_ssl_apis is empty but use_ssl is set to true')
  }

  if $os_region_name != undef {
    warning('The os_region_name parameter is deprecated and will be removed \
in a future release. Use nova::cinder::os_region_name instead')
  }

  if $cinder_catalog_info != undef {
    warning('The catalog_info parameter is deprecated and will be removed \
in a future release. Use nova::cinder::catalog_info instead')
  }

  if $cross_az_attach != undef {
    warning('The cross_az_attach parameter is deprecated. \
Use nova::cinder::cross_az_attach instead.')
  }

  if $upgrade_level_cert != undef {
    warning('The upgrade_level_cert parameter is deprecated and will be removed \
in a future release.')
  }

  if $use_ssl {
    if !$cert_file {
      fail('The cert_file parameter is required when use_ssl is set to true')
    }
    if !$key_file {
      fail('The key_file parameter is required when use_ssl is set to true')
    }
  }

  if $nova_public_key or $nova_private_key {
    file { '/var/lib/nova/.ssh':
      ensure  => directory,
      mode    => '0700',
      owner   => $::nova::params::user,
      group   => $::nova::params::group,
      require => Anchor['nova::config::begin'],
      before  => Anchor['nova::config::end'],
    }

    if $nova_public_key {
      if ! $nova_public_key['key'] or ! $nova_public_key['type'] {
        fail('You must provide both a key type and key data.')
      }

      ssh_authorized_key { 'nova-migration-public-key':
        ensure  => present,
        key     => $nova_public_key['key'],
        type    => $nova_public_key['type'],
        user    => $::nova::params::user,
        require => File['/var/lib/nova/.ssh'],
      }
    }

    if $nova_private_key {
      if ! $nova_private_key[key] or ! $nova_private_key['type'] {
        fail('You must provide both a key type and key data.')
      }

      $nova_private_key_file = $nova_private_key['type'] ? {
        'ssh-rsa'   => '/var/lib/nova/.ssh/id_rsa',
        'ssh-dsa'   => '/var/lib/nova/.ssh/id_dsa',
        'ssh-ecdsa' => '/var/lib/nova/.ssh/id_ecdsa',
        default     => undef
      }

      if ! $nova_private_key_file {
        fail("Unable to determine name of private key file.  Type specified was '${nova_private_key['type']}' \
but should be one of: ssh-rsa, ssh-dsa, ssh-ecdsa.")
      }

      file { $nova_private_key_file:
        content => $nova_private_key[key],
        mode    => '0600',
        owner   => $::nova::params::user,
        group   => $::nova::params::group,
        require => File['/var/lib/nova/.ssh'],
      }
    }
  }

  package { 'python-nova':
    ensure => $ensure_package,
    name   => $::nova::params::python_package_name,
    tag    => ['openstack', 'nova-package'],
  }

  package { 'nova-common':
    ensure  => $ensure_package,
    name    => $::nova::params::common_package_name,
    require => Package['python-nova'],
    tag     => ['openstack', 'nova-package'],
  }

  resources { 'nova_config':
    purge => $purge_config,
  }

  if $auth_strategy {
    warning('The auth_strategy parameter is deprecated, and will be removed in a future release.')
    nova_config { 'api/auth_strategy': value => $auth_strategy }
  }

  nova_config {
    'DEFAULT/ssl_only':                      value => $ssl_only;
    'DEFAULT/cert':                          value => $cert;
    'DEFAULT/key':                           value => $key;
    'console/ssl_ciphers':                   value => $console_ssl_ciphers;
    'console/ssl_minimum_version':           value => $console_ssl_minimum_version;
    'DEFAULT/my_ip':                         value => $my_ip;
    'DEFAULT/host':                          value => $host;
    'DEFAULT/cpu_allocation_ratio':          value => $cpu_allocation_ratio;
    'DEFAULT/ram_allocation_ratio':          value => $ram_allocation_ratio;
    'DEFAULT/disk_allocation_ratio':         value => $disk_allocation_ratio;
    'DEFAULT/initial_cpu_allocation_ratio':  value => $initial_cpu_allocation_ratio;
    'DEFAULT/initial_ram_allocation_ratio':  value => $initial_ram_allocation_ratio;
    'DEFAULT/initial_disk_allocation_ratio': value => $initial_disk_allocation_ratio;
    'DEFAULT/dhcp_domain':                   value => $dhcp_domain;
  }

  # TODO(tkajinam): Change the default value to $::os_service_default when we
  #                 remove nova::api::instance_name_template after Antelope.
  if $instance_name_template != undef {
    nova_config {
      'DEFAULT/instance_name_template': value => $instance_name_template;
    }
  }

  oslo::messaging::rabbit {'nova_config':
    rabbit_use_ssl              => $rabbit_use_ssl,
    heartbeat_timeout_threshold => $rabbit_heartbeat_timeout_threshold,
    heartbeat_rate              => $rabbit_heartbeat_rate,
    heartbeat_in_pthread        => $rabbit_heartbeat_in_pthread,
    kombu_reconnect_delay       => $kombu_reconnect_delay,
    kombu_failover_strategy     => $kombu_failover_strategy,
    amqp_durable_queues         => $amqp_durable_queues,
    kombu_compression           => $kombu_compression,
    kombu_ssl_ca_certs          => $kombu_ssl_ca_certs,
    kombu_ssl_certfile          => $kombu_ssl_certfile,
    kombu_ssl_keyfile           => $kombu_ssl_keyfile,
    kombu_ssl_version           => $kombu_ssl_version,
    rabbit_ha_queues            => $rabbit_ha_queues,
    rabbit_retry_interval       => $rabbit_retry_interval,
  }

  oslo::messaging::amqp { 'nova_config':
    server_request_prefix => $amqp_server_request_prefix,
    broadcast_prefix      => $amqp_broadcast_prefix,
    group_request_prefix  => $amqp_group_request_prefix,
    container_name        => $amqp_container_name,
    idle_timeout          => $amqp_idle_timeout,
    trace                 => $amqp_trace,
    ssl_ca_file           => $amqp_ssl_ca_file,
    ssl_cert_file         => $amqp_ssl_cert_file,
    ssl_key_file          => $amqp_ssl_key_file,
    ssl_key_password      => $amqp_ssl_key_password,
    sasl_mechanisms       => $amqp_sasl_mechanisms,
    sasl_config_dir       => $amqp_sasl_config_dir,
    sasl_config_name      => $amqp_sasl_config_name,
    username              => $amqp_username,
    password              => $amqp_password,
  }

  # SSL Options
  if $use_ssl {
    nova_config {
      'DEFAULT/enabled_ssl_apis': value => join($enabled_ssl_apis, ',');
      'wsgi/ssl_cert_file':       value => $cert_file;
      'wsgi/ssl_key_file':        value => $key_file;
    }

    if $ca_file {
      nova_config {
        'wsgi/ssl_ca_file': value => $ca_file;
      }
    } else {
      nova_config {
        'wsgi/ssl_ca_file': ensure => absent;
      }
    }
  } else {
    nova_config {
      'DEFAULT/enabled_ssl_apis': ensure => absent;
      'wsgi/ssl_cert_file':       ensure => absent;
      'wsgi/ssl_key_file':        ensure => absent;
      'wsgi/ssl_ca_file':         ensure => absent;
    }
  }

  # NOTE(tkajinam): Remove this after Zed release. See lp bug 1967713 .
  nova_config {
    'ssl/cert_file': ensure => absent;
    'ssl/key_file':  ensure => absent;
    'ssl/ca_file':   ensure => absent;
  }

  oslo::messaging::default { 'nova_config':
    transport_url        => $default_transport_url,
    rpc_response_timeout => $rpc_response_timeout,
    control_exchange     => $control_exchange,
  }

  nova_config {
    'DEFAULT/long_rpc_timeout': value => $long_rpc_timeout;
  }

  oslo::messaging::notifications { 'nova_config':
    transport_url => $notification_transport_url,
    driver        => $notification_driver,
    topics        => $notification_topics,
  }

  nova_config {
    'DEFAULT/ovsdb_connection':                       ensure => 'absent';
    'vif_plug_ovs/ovsdb_connection':                  value => $ovsdb_connection;
    'notifications/notification_format':              value => $notification_format;
    # Following may need to be broken out to different nova services
    'DEFAULT/state_path':                             value => $state_path;
    'DEFAULT/service_down_time':                      value => $service_down_time;
    'DEFAULT/rootwrap_config':                        value => $rootwrap_config;
    'DEFAULT/report_interval':                        value => $report_interval;
  }

  oslo::concurrency { 'nova_config': lock_path => $lock_path }

  if $notify_on_state_change and $notify_on_state_change in ['vm_state', 'vm_and_task_state'] {
    nova_config {
      'notifications/notify_on_state_change': value => $notify_on_state_change;
    }
  } else {
    nova_config { 'notifications/notify_on_state_change': ensure => absent; }
  }

  nova_config {
    'upgrade_levels/cells':       value => $upgrade_level_cells;
    'upgrade_levels/cert':        value => pick($upgrade_level_cert, $::os_service_default);
    'upgrade_levels/compute':     value => $upgrade_level_compute;
    'upgrade_levels/conductor':   value => $upgrade_level_conductor;
    'upgrade_levels/intercell':   value => $upgrade_level_intercell;
    'upgrade_levels/network':     value => $upgrade_level_network;
    'upgrade_levels/scheduler':   value => $upgrade_level_scheduler;
  }
}