434
483
endpoint_type='publicURL')
435
484
keystone_ec2 = "{}/ec2tokens".format(keystone_ep)
437
expected = {'dhcpbridge_flagfile': '/etc/nova/nova.conf',
438
'dhcpbridge': '/usr/bin/nova-dhcpbridge',
439
'logdir': '/var/log/nova',
440
'state_path': '/var/lib/nova',
441
'lock_path': '/var/lock/nova',
442
'force_dhcp_release': 'True',
443
'iscsi_helper': 'tgtadm',
444
'libvirt_use_virtio_for_bridges': 'True',
445
'connection_type': 'libvirt',
446
'root_helper': 'sudo nova-rootwrap /etc/nova/rootwrap.conf',
449
'ec2_private_dns_show_ip': 'True',
450
'api_paste_config': '/etc/nova/api-paste.ini',
451
'volumes_path': '/var/lib/nova/volumes',
452
'enabled_apis': 'ec2,osapi_compute,metadata',
453
'auth_strategy': 'keystone',
454
'compute_driver': 'libvirt.LibvirtDriver',
455
'keystone_ec2_url': keystone_ec2,
456
'rabbit_userid': 'nova',
457
'rabbit_virtual_host': 'openstack',
458
'rabbit_password': rabbitmq_relation['password'],
459
'rabbit_host': rabbitmq_relation['hostname'],
460
'glance_api_servers': glance_relation['glance-api-server'],
461
'network_manager': 'nova.network.manager.FlatDHCPManager',
462
's3_listen_port': '3323',
463
'osapi_compute_listen_port': '8764',
464
'ec2_listen_port': '8763'}
466
# This has been moved to [database] for I and above
467
if self._get_openstack_release() < self.precise_icehouse:
468
mysql_relation = self.mysql_sentry.relation('shared-db',
469
'nova-cloud-controller:shared-db')
470
db_uri = "mysql://{}:{}@{}/{}".format('nova',
471
mysql_relation['nova_password'],
472
mysql_relation['db_host'],
474
expected['sql_connection'] = db_uri
476
ret = u.validate_config_data(unit, conf, 'DEFAULT', expected)
478
message = "nova config error: {}".format(ret)
479
amulet.raise_status(amulet.FAIL, msg=message)
481
def test_nova_database_config(self):
482
"""Verify the data in the nova config file's database section."""
483
# NOTE(hopem): this is >= Icehouse only
484
if self._get_openstack_release() < self.precise_icehouse:
487
unit = self.nova_cc_sentry
488
conf = '/etc/nova/nova.conf'
489
mysql_relation = self.mysql_sentry.relation('shared-db',
490
'nova-cloud-controller:shared-db')
491
db_uri = "mysql://{}:{}@{}/{}".format('nova',
492
mysql_relation['nova_password'],
493
mysql_relation['db_host'],
496
# For >= icehouse we move away from deprecated sql_connection
497
expected = {'connection': db_uri}
499
ret = u.validate_config_data(unit, conf, 'database', expected)
501
message = "nova config error: {}".format(ret)
502
amulet.raise_status(amulet.FAIL, msg=message)
504
def test_nova_keystone_authtoken_config(self):
505
"""Verify the data in the nova config file's keystone_authtoken
506
section. This data only exists since icehouse."""
507
if self._get_openstack_release() < self.precise_icehouse:
510
unit = self.nova_cc_sentry
511
conf = '/etc/nova/nova.conf'
512
486
keystone_relation = self.keystone_sentry.relation('identity-service',
513
487
'nova-cloud-controller:identity-service')
514
488
keystone_uri = "http://{}:{}/".format(keystone_relation['service_host'],
515
489
keystone_relation['service_port'])
516
expected = {'auth_uri': keystone_uri,
517
'auth_host': keystone_relation['service_host'],
518
'auth_port': keystone_relation['auth_port'],
519
'auth_protocol': keystone_relation['auth_protocol'],
490
identity_uri = "{}://{}:{}/".format(keystone_relation['auth_protocol'],
491
keystone_relation['service_host'],
492
keystone_relation['auth_port'])
494
mysql_relation = self.mysql_sentry.relation('shared-db',
495
'nova-cloud-controller:shared-db')
496
db_uri = "mysql://{}:{}@{}/{}".format('nova',
497
mysql_relation['nova_password'],
498
mysql_relation['db_host'],
503
'dhcpbridge_flagfile': '/etc/nova/nova.conf',
504
'dhcpbridge': '/usr/bin/nova-dhcpbridge',
505
'logdir': '/var/log/nova',
506
'state_path': '/var/lib/nova',
507
'force_dhcp_release': 'True',
508
'iscsi_helper': 'tgtadm',
509
'libvirt_use_virtio_for_bridges': 'True',
510
'connection_type': 'libvirt',
511
'root_helper': 'sudo nova-rootwrap /etc/nova/rootwrap.conf',
514
'ec2_private_dns_show_ip': 'True',
515
'api_paste_config': '/etc/nova/api-paste.ini',
516
'volumes_path': '/var/lib/nova/volumes',
517
'enabled_apis': 'ec2,osapi_compute,metadata',
518
'auth_strategy': 'keystone',
519
'compute_driver': 'libvirt.LibvirtDriver',
520
'keystone_ec2_url': keystone_ec2,
521
'network_manager': 'nova.network.manager.FlatDHCPManager',
522
's3_listen_port': '3323',
523
'osapi_compute_listen_port': '8764',
524
'ec2_listen_port': '8763'
527
if self._get_openstack_release() < self.trusty_kilo:
529
if self._get_openstack_release() < self.precise_icehouse:
530
expected[d]['sql_connection'] = db_uri
537
keystone_authtoken = {
538
'keystone_authtoken': {
539
'auth_uri': keystone_uri,
540
'auth_host': keystone_relation['service_host'],
541
'auth_port': keystone_relation['auth_port'],
542
'auth_protocol': keystone_relation['auth_protocol'],
543
'admin_tenant_name': keystone_relation['service_tenant'],
544
'admin_user': keystone_relation['service_username'],
545
'admin_password': keystone_relation['service_password'],
548
expected.update(database)
549
expected.update(keystone_authtoken)
550
expected[d]['lock_path'] = '/var/lock/nova'
551
expected[d]['libvirt_use_virtio_for_bridges'] = 'True'
552
expected[d]['compute_driver'] = 'libvirt.LibvirtDriver'
553
expected[d]['rabbit_userid'] = 'nova'
554
expected[d]['rabbit_virtual_host'] = 'openstack'
555
expected[d]['rabbit_password'] = rabbitmq_relation['password']
556
expected[d]['rabbit_host'] = rabbitmq_relation['hostname']
557
expected[d]['glance_api_servers'] = glance_relation['glance-api-server']
562
'connection': db_uri,
563
'max_pool_size': '2',
568
'api_servers': glance_relation['glance-api-server'],
571
keystone_authtoken = {
572
'keystone_authtoken': {
573
'identity_uri': identity_uri,
574
'auth_uri': keystone_uri,
520
575
'admin_tenant_name': keystone_relation['service_tenant'],
521
576
'admin_user': keystone_relation['service_username'],
522
'admin_password': keystone_relation['service_password']}
577
'admin_password': keystone_relation['service_password'],
578
'signing_dir': '/var/cache/nova',
591
oslo_messaging_rabbit = {
592
'oslo_messaging_rabbit': {
593
'rabbit_userid': 'nova',
594
'rabbit_virtual_host': 'openstack',
595
'rabbit_password': rabbitmq_relation['password'],
596
'rabbit_host': rabbitmq_relation['hostname'],
600
'oslo_concurrency': {
601
'lock_path': '/var/lock/nova',
604
expected.update(database)
605
expected.update(glance)
606
expected.update(keystone_authtoken)
607
expected.update(osapi_v3)
608
expected.update(conductor)
609
expected.update(oslo_messaging_rabbit)
610
expected.update(oslo_concurrency)
524
ret = u.validate_config_data(unit, conf, 'keystone_authtoken', expected)
526
message = "nova config error: {}".format(ret)
527
amulet.raise_status(amulet.FAIL, msg=message)
612
for section, pairs in expected.iteritems():
613
ret = u.validate_config_data(unit, conf, section, pairs)
615
message = "nova config error: {}".format(ret)
616
amulet.raise_status(amulet.FAIL, msg=message)
529
618
def test_image_instance_create(self):
530
619
"""Create an image/instance, verify they exist, and delete them."""