diff --git a/packstack/modules/ospluginutils.py b/packstack/modules/ospluginutils.py index a7bcc8dd3..65fbfce4d 100644 --- a/packstack/modules/ospluginutils.py +++ b/packstack/modules/ospluginutils.py @@ -45,6 +45,14 @@ class ManifestFiles(object): self.filelist.append((filename, marker)) + def prependFile(self, filename, marker, data=''): + self.data[filename] = data + '\n' + self.data.get(filename, '') + for f, p in self.filelist: + if f == filename: + return + + self.filelist.append((filename, marker)) + def getFiles(self): return [f for f in self.filelist] @@ -76,6 +84,10 @@ def appendManifestFile(manifest_name, data, marker=''): manifestfiles.addFile(manifest_name, marker, data) +def prependManifestFile(manifest_name, data, marker=''): + manifestfiles.prependFile(manifest_name, marker, data) + + def generateHieraDataFile(): os.mkdir(basedefs.HIERADATA_DIR, 0o700) with open(HIERA_DEFAULTS_YAML, 'w') as outfile: diff --git a/packstack/plugins/nova_300.py b/packstack/plugins/nova_300.py index b3d61b289..c227e73a7 100644 --- a/packstack/plugins/nova_300.py +++ b/packstack/plugins/nova_300.py @@ -30,6 +30,7 @@ from packstack.modules import common from packstack.modules.documentation import update_params_usage from packstack.modules.shortcuts import get_mq from packstack.modules.ospluginutils import appendManifestFile +from packstack.modules.ospluginutils import prependManifestFile from packstack.modules.ospluginutils import createFirewallResources from packstack.modules.ospluginutils import deliver_ssl_file from packstack.modules.ospluginutils import getManifestTemplate @@ -812,6 +813,7 @@ def create_vncproxy_manifest(config, messages): def create_common_manifest(config, messages): global compute_hosts, network_hosts + network_type = (config['CONFIG_NEUTRON_INSTALL'] == "y" and 'neutron' or 'nova') network_multi = len(network_hosts) > 1 @@ -854,7 +856,9 @@ def create_common_manifest(config, messages): data += getManifestTemplate("nova_common_pw") else: data += getManifestTemplate("nova_common_nopw") - appendManifestFile(os.path.split(manifestfile)[1], data) + # We need to have class nova before class nova::api, so prepend + # instead of append + prependManifestFile(os.path.split(manifestfile)[1], data) if config['CONFIG_AMQP_ENABLE_SSL'] == 'y': nova_hosts = compute_hosts diff --git a/packstack/puppet/templates/mariadb_nova_install.pp b/packstack/puppet/templates/mariadb_nova_install.pp index 8638800b8..62fc6efe7 100644 --- a/packstack/puppet/templates/mariadb_nova_install.pp +++ b/packstack/puppet/templates/mariadb_nova_install.pp @@ -4,3 +4,9 @@ class { '::nova::db::mysql': allowed_hosts => '%%', charset => 'utf8', } +class { '::nova::db::mysql_api': + password => hiera('CONFIG_NOVA_DB_PW'), + host => '%%', + allowed_hosts => '%%', + charset => 'utf8', +} \ No newline at end of file diff --git a/packstack/puppet/templates/nova_api.pp b/packstack/puppet/templates/nova_api.pp index fa119a799..888138991 100644 --- a/packstack/puppet/templates/nova_api.pp +++ b/packstack/puppet/templates/nova_api.pp @@ -23,6 +23,7 @@ class { '::nova::api': neutron_metadata_proxy_shared_secret => hiera('CONFIG_NEUTRON_METADATA_PW_UNQUOTED', undef), default_floating_pool => $default_floating_pool, pci_alias => hiera('CONFIG_NOVA_PCI_ALIAS'), + sync_db_api => true } Package<| title == 'nova-common' |> -> Class['nova::api'] diff --git a/packstack/puppet/templates/nova_common_nopw.pp b/packstack/puppet/templates/nova_common_nopw.pp index 4a7f86d9f..1ab00d4a5 100644 --- a/packstack/puppet/templates/nova_common_nopw.pp +++ b/packstack/puppet/templates/nova_common_nopw.pp @@ -3,6 +3,5 @@ Firewall <| |> -> Class['nova'] nova_config{ - 'DEFAULT/sql_connection': value => hiera('CONFIG_NOVA_SQL_CONN_NOPW'); 'DEFAULT/metadata_host': value => hiera('CONFIG_CONTROLLER_HOST'); } diff --git a/packstack/puppet/templates/nova_common_pw.pp b/packstack/puppet/templates/nova_common_pw.pp index 68ef5ea7a..941578cae 100644 --- a/packstack/puppet/templates/nova_common_pw.pp +++ b/packstack/puppet/templates/nova_common_pw.pp @@ -3,7 +3,6 @@ Firewall <| |> -> Class['nova'] nova_config{ - 'DEFAULT/sql_connection': value => hiera('CONFIG_NOVA_SQL_CONN_PW'); # metadata_host has to be IP 'DEFAULT/metadata_host': value => force_ip(hiera('CONFIG_CONTROLLER_HOST')); } diff --git a/packstack/puppet/templates/nova_common_rabbitmq.pp b/packstack/puppet/templates/nova_common_rabbitmq.pp index e6876cd32..c256fb246 100644 --- a/packstack/puppet/templates/nova_common_rabbitmq.pp +++ b/packstack/puppet/templates/nova_common_rabbitmq.pp @@ -1,3 +1,6 @@ +$nova_db_pw = hiera('CONFIG_NOVA_DB_PW') +$nova_mariadb_host = hiera('CONFIG_MARIADB_HOST_URL') + $private_key = { 'type' => hiera('NOVA_MIGRATION_KEY_TYPE'), key => hiera('NOVA_MIGRATION_KEY_SECRET'), @@ -32,18 +35,20 @@ $nova_common_notification_driver = hiera('CONFIG_CEILOMETER_INSTALL') ? { } class { '::nova': - glance_api_servers => "${nova_common_rabbitmq_cfg_storage_host}:9292", - rabbit_host => hiera('CONFIG_AMQP_HOST_URL'), - rabbit_port => hiera('CONFIG_AMQP_CLIENTS_PORT'), - rabbit_use_ssl => hiera('CONFIG_AMQP_SSL_ENABLED'), - rabbit_userid => hiera('CONFIG_AMQP_AUTH_USER'), - rabbit_password => hiera('CONFIG_AMQP_AUTH_PASSWORD'), - verbose => true, - debug => hiera('CONFIG_DEBUG_MODE'), - nova_public_key => $public_key, - nova_private_key => $private_key, - kombu_ssl_ca_certs => $kombu_ssl_ca_certs, - kombu_ssl_keyfile => $kombu_ssl_keyfile, - kombu_ssl_certfile => $kombu_ssl_certfile, - notification_driver => $nova_common_notification_driver, + glance_api_servers => "${nova_common_rabbitmq_cfg_storage_host}:9292", + rabbit_host => hiera('CONFIG_AMQP_HOST_URL'), + rabbit_port => hiera('CONFIG_AMQP_CLIENTS_PORT'), + rabbit_use_ssl => hiera('CONFIG_AMQP_SSL_ENABLED'), + rabbit_userid => hiera('CONFIG_AMQP_AUTH_USER'), + rabbit_password => hiera('CONFIG_AMQP_AUTH_PASSWORD'), + verbose => true, + debug => hiera('CONFIG_DEBUG_MODE'), + nova_public_key => $public_key, + nova_private_key => $private_key, + kombu_ssl_ca_certs => $kombu_ssl_ca_certs, + kombu_ssl_keyfile => $kombu_ssl_keyfile, + kombu_ssl_certfile => $kombu_ssl_certfile, + notification_driver => $nova_common_notification_driver, + database_connection => "mysql+pymysql://nova:${nova_db_pw}@${nova_mariadb_host}/nova", + api_database_connection => "mysql+pymysql://nova_api:${nova_db_pw}@${nova_mariadb_host}/nova_api", }